lines = Json Type Provider和Json.Net库的True参数?

问题描述

我正在参加这场Kaggle比赛。 kaggle上的Jupyter笔记本仅支持R和Python,我想在本地使用F#。问题在于数据集是.json文件,而F#Json Type Provider和Newtonsoft库在尝试解析文件时均失败。

以下是代码在F#中失败的示例:

open FSharp.Data
type Context = JsonProvider<"train.json">
let context = Context.

open System
open System.IO
open Newtonsoft.Json
open Newtonsoft.Json.Linq

let object = JObject.Parse(File.ReadAllText("train.json"));
object

This Python示例使用以下代码行正确解析它们:

train = pd.read_json('../input/stanford-covid-vaccine/train.json',lines=True)
test = pd.read_json('../input/stanford-covid-vaccine/test.json',lines=True)

在笔记本中,作者说如果没有“ lines = True”参数,则read_json方法将失败,并出现this尾随错误

我的问题:假设tis是相同的错误,是否有办法将相同类型的“ lines = true”应用于.NET库以解析json?

解决方法

我看过一些数据集,其格式是每行一条有效的JSON记录:

{"event":"nothing 1"}
{"event":"nothing 2"}
{"event":"nothing 3"}

这总体上不是有效的JSON。我认为您可以逐行解析它,也可以将其转换为有效的JSON。对于逐行解析(可能更有效,因为您可以以流方式进行此解析),我将使用:

open FSharp.Data
type Log = JsonProvider<"""{"event":"nothing 1"}""">

for line in File.ReadAllLines("some.json") do
  let l = Log.Parse(line)
  printfn "%s" l.Event