将Json信息转换为F#列表
我正在发现Json文件,我想创建一个F代码,读取以下Json文件(摘自Facebook connect),并将数据放入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_
[“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)