F#如何循环Json JObject数组 [英] F# how to loop the Json JObject array

查看:392
本文介绍了F#如何循环Json JObject数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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包可以做同样的工作,请分享你的代码。

谢谢,

推荐答案


  1. 你可能意味着`解析 d Json`使用'd'
  2. 索引访问,正如您现在应该知道的那样,在F#中写的是"。",如
    parsedJson。[" events"]

所以

foreach (var EventX in parsedJson["events"])
{
    Console.WriteLine("{0}", EventX)
}

写的

    parsedJson.["events"]
    |> Seq.iter (printfn "%A")





这篇关于F#如何循环Json JObject数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆