[英]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時,這會給出“對象引用未設置為對象實例”的錯誤。
我知道問題可能取決於嵌套元素,但我不知道如何滿足這些要求。 有人可以幫忙嗎?
我認為你在代碼中遇到的問題是你沒有處理primitiveValues
或pathValues
為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.