簡體   English   中英

使用嵌套數組的JSON.net c#讀取JSON

[英]Read JSON using JSON.net c# with nested arrays

我有一個JSON數據集並使用C#JSON.net庫我試圖將數據讀取為連接字符串,但無法提取數據。 數據有根元素,然后是行。 對於“行”中的每一行,我想提取一個[“conversionPathValue”] [“nodeValue”]值列表並將它們連接在一起,然后將它們與primitiveValue值連接起來。 2行的示例代碼如下:

      "rows": [
        [
          {
            "conversionPathValue": [
              {
                "interactionType": "CLICK",
                "nodeValue": "MET"
              }
            ]
          },
          {
            "primitiveValue": "20130122"
          },
          {
            "primitiveValue": "000"
          },
          {
            "primitiveValue": "000001"
          },
          {
            "primitiveValue": "000"
          },
          {
            "primitiveValue": "11"
          },
          {
            "primitiveValue": "7290.521799"
          }
        ],
        [
          {
            "conversionPathValue": [
              {
                "interactionType": "CLICK",
                "nodeValue": "MET"
              },
              {
                "interactionType": "CLICK",
                "nodeValue": "MET"
              },
              {
                "interactionType": "CLICK",
                "nodeValue": "MET"
              },
              {
                "interactionType": "CLICK",
                "nodeValue": "MET"
              },
              {
                "interactionType": "CLICK",
                "nodeValue": "MET"
              },
              {
                "interactionType": "CLICK",
                "nodeValue": "MET"
              },
              {
                "interactionType": "CLICK",
                "nodeValue": "MET"
              },
              {
                "interactionType": "CLICK",
                "nodeValue": "MET"
              },
              {
                "nodeValue": "(none)"
              },
              {
                "nodeValue": "(none)"
              },
              {
                "interactionType": "CLICK",
                "nodeValue": "organic"
              }
            ]
          },
          {
            "primitiveValue": "20130122"
          },
          {
            "primitiveValue": "000"
          },
          {
            "primitiveValue": "000011"
          },
          {
            "primitiveValue": "005"
          },
          {
            "primitiveValue": "1"
          },
          {
            "primitiveValue": "1628.0"
          }
        ],
                    .....etc........

使用以下代碼:(jsonExtract是一個JObject)

            var rows = jsonExtract["root"]["rows"][0].Children();

            foreach (JToken result in rows)
            {
                var primitiveValues = result["primitiveValue"].Values<string>();
                var pathValues = result["conversionPathValue"].Values<string>();

                string joinedprimitiveValues = string.Join(",", primitiveValues);
                string joinedpathValues = string.Join("-", pathValues);

                file2.WriteLine(joinedpathValues + ", " + joinedprimitiveValues);

            }

在設置primitiveValues時,這會給出“對象引用未設置為對象實例”的錯誤。

我知道問題可能取決於嵌套元素,但我不知道如何滿足這些要求。 有人可以幫忙嗎?

我認為你在代碼中遇到的問題是你沒有處理primitiveValuespathValues為null的情況,因為你解決行的方式,實際上會在每次迭代時發生。

例如,如果這是一行:

{
    "primitiveValue": "20130122"
},

然后result["conversionPathValue"]將返回null

嘗試這個:

var obj = JObject.Parse(json);
var rows = obj["rows"].Children();

foreach (JToken row in rows)
{
    List<string> conversionPaths = new List<string>();
    List<string> primitiveValues = new List<string>();

    foreach (JToken value in row.Children())
    {
        var primitiveValue = value["primitiveValue"];

        if (primitiveValue != null)
        {
            primitiveValues.Add(primitiveValue.Value<string>());
        }

        var conversionPathValue = value["conversionPathValue"];

        if (conversionPathValue != null)
        {
            var paths = conversionPathValue.Children()
                .Where(t => t["nodeValue"] != null)
                .Select(t => t["nodeValue"].Value<string>());

            conversionPaths.AddRange(paths);
        }
    }

    Console.WriteLine("Primitive Values:");
    Console.WriteLine(string.Join(",", primitiveValues.ToArray()));
    Console.WriteLine("Conversion Paths:");
    Console.WriteLine(string.Join(",", conversionPaths.ToArray()) + "\n");
}

當我在給定的JSON上運行它時,它會產生以下結果:

Primitive Values:
20130122,000,000001,000,11,7290.521799
Conversion Paths:
MET

Primitive Values:
20130122,000,000011,005,1,1628.0
Conversion Paths:
MET,MET,MET,MET,MET,MET,MET,MET,(none),(none),organic

請注意,我在JSON周圍添加了{}以使其正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM