Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 将CSV文件中的值合并到JSON结构中_F#_F# Data - Fatal编程技术网

F# 将CSV文件中的值合并到JSON结构中

F# 将CSV文件中的值合并到JSON结构中,f#,f#-data,F#,F# Data,我有一个相当大的JSON结构,需要使用CSV文件中的值进行更新 CSV文件中的每一行都包含要更新的对象id和字段名。我要更新的值可以嵌套 使用JsonTypeProvider读取JSON数据很容易,但如何在将值写入文件之前合并这些值 我不想创建一个与JSON结构匹配的类型并对其进行反序列化,因为它包含了太多我不感兴趣的值,但我需要它们都包含在最终结果中 这是我的节目: type JsonFile = JsonProvider<"./myjson.json"> type CsvFile

我有一个相当大的JSON结构,需要使用CSV文件中的值进行更新

CSV文件中的每一行都包含要更新的对象id和字段名。我要更新的值可以嵌套

使用JsonTypeProvider读取JSON数据很容易,但如何在将值写入文件之前合并这些值

我不想创建一个与JSON结构匹配的类型并对其进行反序列化,因为它包含了太多我不感兴趣的值,但我需要它们都包含在最终结果中

这是我的节目:

type JsonFile = JsonProvider<"./myjson.json">
type CsvFile = CsvProvider<"./texts.csv">

[<EntryPoint>]
let main argv =  

    let jsonValues = JsonFile .GetSample().Result

    let texts = CsvFile.GetSample().Rows

    let result =
        jsonValues
        |> Seq.map(fun v ->

            // I would like to merge values here
            let texts = texts |> Seq.filter(fun t -> t.Id = string v.Id)
            let description = texts |> Seq.tryFind (fun t -> t.FieldName = "Description")

            if description.IsSome then
                v.Description.["en"] <- description.Value.En // This doesn't work of course, just an example of what I would like to do
                v.Description.["no"] <- description.Value.No

            // etc etc

            v.JsonValue                  
        )
        |> Seq.map(fun json -> json.ToString(JsonSaveOptions.DisableFormatting))
        |> String.concat "\n"



    let fileName = "./mergedvalues.ndjson"

    File.WriteAllText(fileName,
                      result,
                      System.Text.Encoding.UTF8)

    0

我的问题是,我的一些记录有很多字段,所以像这样使用构造函数非常不方便,有时甚至很难正确。有什么方法可以使用我现有的<代码> JsonProvider <代码>值来实例化该类型,只更新我想更新的字段?

对于这种情况,您应该考虑使用JSONValm属性属性,该属性基本上是一个字符串*JSONVALL数组。
然后,您可以匹配csv中定义的属性,并越来越深地更新(折叠)jsonvalue,并将其注入主构造函数(如果您没有重新定义它,则为Root)。

为什么这不起作用
v.Description。[“en”]属性不可变似乎您的问题尚未解决::(无论如何,谢谢!
let newDescription =
     JsonFile.Description(``type`` = v.Type,
                           no = v.Description.No,
                           en = Some "my new value",
                           fr = v.Description.Fr,
                           de = v.Description.De,
                           nl = v.Description.Nl)