Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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
将Json信息转换为F#列表_Json_List_F# - Fatal编程技术网

将Json信息转换为F#列表

将Json信息转换为F#列表,json,list,f#,Json,List,F#,我正在发现Json文件,我想创建一个F代码,读取以下Json文件(摘自Facebook connect),并将数据放入F列表中,如本例所示:[“id”;“Name”;“first_Name”;“last_Name”;“link”;“username”;“birth”;“gender”]。你有什么想法吗?我不是这方面的专家,如果你对此有一个想法,这将对我非常有帮助 Json文件: { "id": "6234306", "name": "Katter Maxime", "first_

我正在发现Json文件,我想创建一个F代码,读取以下Json文件(摘自Facebook connect),并将数据放入F列表中,如本例所示:
[“id”;“Name”;“first_Name”;“last_Name”;“link”;“username”;“birth”;“gender”]
。你有什么想法吗?我不是这方面的专家,如果你对此有一个想法,这将对我非常有帮助

Json文件:

{
  "id": "6234306", 
  "name": "Katter Maxime", 
  "first_name": "Katter", 
  "last_name": "Maxime", 
  "link": "http://www.facebook.com/katter.maxime", 
  "username": "katter.maxime", 
  "birthday": "11/10/1982", 
  "work": [
    {
      "employer": {
        "id": "10164958321", 
        "name": "Bedur"
      }, 
      "position": {
        "id": "14014810602", 
        "name": "student"
      }, 
      "start_date": "0000-00", 
      "end_date": "0000-00"
    }
  ], 
  "education": [
    {
      "school": {
        "id": "107990348", 
        "name": "AAAAAAAA"
      }, 
      "year": {
        "id": "1406175699", 
        "name": "2007"
      }, 
      "type": "Graduate School"
    }
  ], 
  "gender": "male", 
  "locale": "en_US", 
  "updated_time": "2011-11-03T17:31:04+0000", 
  "type": "user"
}
使用

[对于(JObject.Parse(json):>IDictionary)->key中的KeyValue(key,ux)]

jsonKeys.fsx:

#r "System.Web.Extensions.dll"

open System
open System.IO
open System.Collections.Generic
open System.Web.Script.Serialization

let _ =
  let jsonStr = File.ReadAllText "json.txt"
  let jss = new JavaScriptSerializer();
  let dic = jss.DeserializeObject(jsonStr) :?> Dictionary<string, obj>
  let keyList = dic.Keys |> Seq.toList
  printfn "%A" keyList
添加输入的大小写,如

{"data":[{"id":"902395","name":"Thomas Girba"},{"id":"194589","name":"Durand Gure"},..]}


let listToTuple [x;y] = (string x, string y)
let _ =
  let jsonStr = File.ReadAllText "json2.txt"
  let jss = new JavaScriptSerializer();
  let dic = jss.DeserializeObject(jsonStr) :?> Dictionary<string, obj>
  let data = dic.["data"] :?> obj []
(*
  let result =
    data
    |> Array.map (fun x -> (x :?> Dictionary<string,obj>).Keys |> Seq.toList |> listToTuple)
  printfn "%A" result //[|("id", "name"); ("id", "name")|]
*)
  let result =
    data
    |> Array.map (fun x ->
         let d = x :?> Dictionary<string,obj>
         string d.["id"], string d.["name"] //value
       )
  printfn "%A" result //[|("902395", "Thomas Girba"); ("194589", "Durand Gure")|]

open Microsoft.FSharp.Reflection
let arrayToTuple (ar: 'a array)  =
  let len = Array.length ar
  let ty = FSharpType.MakeTupleType(Array.create len typeof<'a>)
  FSharpValue.MakeTuple(ar, ty)
{“数据”:[{“id”:“902395”,“name”:“Thomas Girba”},{“id”:“194589”,“name”:“Durand Gure”},…]}
让listToTuple[x;y]=(字符串x,字符串y)
让我们=
让jsonStr=File.ReadAllText“json2.txt”
让jss=newJavaScriptSerializer();
让dic=jss.DeserializeObject(jsonStr):?>Dictionary
让数据=dic。[“数据”]:?>obj[]
(*
让结果=
数据
|>Array.map(有趣的x->(x:?>字典).Keys |>Seq.toList |>listToTuple)
printfn“%A”结果//[|(“id”、“name”);(“id”、“name”)|]
*)
让结果=
数据
|>Array.map(乐趣x->
设d=x:?>字典
字符串d.[“id”],字符串d.[“name”]//值
)
printfn“%A”结果//[|(“902395”,“托马斯·吉尔巴”);(“194589”,“杜兰德·古尔”)|]
打开Microsoft.FSharp.Reflection
让ArrayTuple(ar:'数组)=
设len=Array.length ar

让ty=FSharpType.MakeTupleType(Array.create len typeofOk谢谢你,但是你如何得到答案呢?最好是一个元组(“id”;“6234306”);(“name”;“Katter Maxime”):我所说的“如何得到答案”不是结果“id”,而是人的id,这里是“6234306”)。正如我之前所问的,最好是一个元组,你认为这可能吗?@katter74,如果你想要KeyValuePair列表,那么“dic |>Seq.toList”。如果您想要元组列表,那么“dic |>Seq.map(fun x->x.Key,x.Value)|>Seq.toList”在这种情况下非常有效。你知道当我有以下文件(facebook提供的朋友列表)时该怎么办吗:{“数据”:[{“id”:“902395”,“姓名”:“Thomas Girba”},{“id”:“194589”,“姓名”:“Durand Gure”},…我想创建一个元组列表,其中包含(“id”,“姓名”);(“id”,“姓名”);(“id”,“姓名”)…你需要键(“id”,“姓名”),真的吗?我有以下错误:错误FS0001:类型不兼容。等待JToken->'a但获取KeyValuePair->'b*'c类型“JToken”与类型“KeyValuePair”不对应。请再说一句:您知道如何得到元组吗?类似于(“id”;“6234306”);(“名称”;“Katter Maxime”)…我忘记了对
IDictionary
的强制转换。它是固定的。您必须使用递归来正确输出键/值对,但要获得顶级子级,您可以执行以下操作:
JObject.Parse(json.children()|>Seq.map(fun p->p.Name,p.value.ToString())
>fsi jsonKeys.fsx
["id"; "name"; "first_name"; "last_name"; "link"; "username"; "birthday"; "work";
 "education"; "gender"; "locale"; "updated_time"; "type"]
{"data":[{"id":"902395","name":"Thomas Girba"},{"id":"194589","name":"Durand Gure"},..]}


let listToTuple [x;y] = (string x, string y)
let _ =
  let jsonStr = File.ReadAllText "json2.txt"
  let jss = new JavaScriptSerializer();
  let dic = jss.DeserializeObject(jsonStr) :?> Dictionary<string, obj>
  let data = dic.["data"] :?> obj []
(*
  let result =
    data
    |> Array.map (fun x -> (x :?> Dictionary<string,obj>).Keys |> Seq.toList |> listToTuple)
  printfn "%A" result //[|("id", "name"); ("id", "name")|]
*)
  let result =
    data
    |> Array.map (fun x ->
         let d = x :?> Dictionary<string,obj>
         string d.["id"], string d.["name"] //value
       )
  printfn "%A" result //[|("902395", "Thomas Girba"); ("194589", "Durand Gure")|]

open Microsoft.FSharp.Reflection
let arrayToTuple (ar: 'a array)  =
  let len = Array.length ar
  let ty = FSharpType.MakeTupleType(Array.create len typeof<'a>)
  FSharpValue.MakeTuple(ar, ty)