F#如何循环Json JObject数组 [英] F# how to loop the Json JObject array
问题描述
Hello:
我必须从一个相当复杂的Json结构化数据中解析并提取有用的信息。 以下只是Json数据的一小部分:
{{
" offset":0,
" per-page":1,
" total":1,
" events":[
{
" id":14,
" name":" Team A at Team B",
" sport-id":14,
" start":" 2018-04-15T19:35:00Z",
" in-running-flag":true,
" all-live":true,
" category-id":[
14,
40620231567,
41046852088,
69459601606
],
" status":" open",
" volume":10.01,
" event-participant":[
{
" id":14,
" event-id":14,
" participant-name":" Team A"
},
{
" id":15,
" event-id":14,
" participant-name":" Team B"
}
],
" markets" ;: [
{
" live":true,
" event-id":14,
" id":14,
" name":" line",
" runners":[
< span style ="font-family:Calibri; font-size:10.5000pt"> {
" withdrawn":false,
" prices":[
{
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;"可供量QUOT; :213.01,
" currency":" ; USD",
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;"率型" :"DECIMAL",
" rate":1.17857 ,
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;"十进制率" :1.17857,
" side":" ; b",
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;"交换型" :"二进制"
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;},跨度>
],
]
}}
我使用了一些在线工具来分析Json数据的结构,但它相当复杂。我想用旧方法解析Json数据,定义一个包含必要信息的类型,但是
Json结构相当复杂,似乎不是一件容易的事,甚至不可能这样做。同一个网站甚至有更复杂的Json结构化数据要解析。
但是,有人已经在C#中解析了完全相同的Json数据,因为代码相当冗长,但我可以看到C#代码的重要相关部分是:
using System;
using System.Text;
using Newtonsoft.Json.Linq;
using Microsoft.VisualBasic;
JObject parsedJson = null;
parsedJson = JObject.Parse(st_RESPONSE);
/// st_RESPONSE is the response of http REST request
foreach (JObject EventX in parsedJson["events"])
{
...
Newtonsoft.Json.Linq.JArray arEventMarkets = (JArray)EventX["markets"];
foreach (Newtonsoft.Json.Linq.JObject MarketX in arEventMarkets)
{
....
与用于定义Json类型的F#方式不同,这几乎是不可能的,因为实际的数据结构非常复杂,C#代码只是循环每一层Json数据,并解析并获得必要的
信息。
我尝试做同样的事情,但我还不知道第一层,以下是我的代码:
#light
open FSharp.Data
open Newtonsoft.Json
open Newtonsoft.Json.Linq
open RestSharp
open RestSharp.Deserializers
open System
open System.Collections
let client = new RestClient("https://someurl")
let request = new RestRequest(Method.GET)
request.AddHeader("Accept", "application/json") |> ignore
request.AddHeader("Content-Type", "application/json") |> ignore
request.AddParameter("states", "open") |> ignore
let response = client.Execute(request)
let parsedJson = JObject.Parse(response.Content)
注意: response.Content 与
相同 st_RESPONSE 在C#代码中。
如何在C#中完成同样的工作?
foreach (JObject EventX
in parsedJson [ " events" ])
JObject数组 parsedJson [ " events" ] F#中不存在
,但在C#中,它存在。
名称
价值
类型
parseJson [" events"]
错误CS0103:当前上下文中不存在名称'parseJson'
请指教,如何在
中循环Json JObject数组 Newtonsoft.Json ,或者如果你知道F#的其他JSon包可以做同样的工作,请分享你的代码。
谢谢,
推荐答案
- 你可能意味着`解析 d Json`使用'd'
- 索引访问,正如您现在应该知道的那样,在F#中写的是"。",如
parsedJson。[" events"]
所以
foreach (var EventX in parsedJson["events"])
{
Console.WriteLine("{0}", EventX)
}
写的
parsedJson.["events"]
|> Seq.iter (printfn "%A")
这篇关于F#如何循环Json JObject数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!