[英]Convert JSON array into another structure
我正在寻找一种可以使用 C# 转换 JSON 结构的解决方案。 目前,我正在尝试使用 Newtonsoft 库转换此 JSON 结构,但我没有找到任何解决方案。
下面的 JSON 需要转换:
[
[
{
"FieldName": "Id",
"Value": 1234
},
{
"FieldName": "FieldName1",
"Value": 2722
},
{
"FieldName": "FieldName2",
"Value": "2022-06-21T13:03:11.5958542Z"
},
{
"FieldName": "FieldName3",
"Value": "XYZ"
}
]
]
上述 JSON 所需的 JSON 结构:
[
{
"Id": 1234,
"FieldName1" : 2722,
"FieldName2" : "2022-06-21T13:03:11.5958542Z",
"FieldName3" : "XYZ"
}
]
你必须遍历你的内部数组。
必须创建一个JObject
并在循环中填充输入数组中的数据。
必须检查值的数据类型: int.TryParse
在布尔值的情况下,必须扩展 if 条件。
public void Transform()
{
var data = "[ [ { \"FieldName\": \"Id\", \"Value\": 1234 }, { \"FieldName\": \"FieldName1\", \"Value\": 2722 }, { \"FieldName\": \"FieldName2\", \"Value\": \"2022-06-21T13:03:11.5958542Z\" }, { \"FieldName\": \"FieldName3\", \"Value\": \"XYZ\" } ] ]";
var input = JArray.Parse(data);
var inputFirst = input[0] as JArray;
var outputItem = new JObject();
foreach (JObject item in inputFirst)
{
var fieldName = item["FieldName"].Value<string>();
var fieldValue = item["Value"].Value<string>();
if (int.TryParse(fieldValue, out int fieldIntValue))
{
outputItem[fieldName] = fieldIntValue;
}
else
{
outputItem[fieldName] = fieldValue;
}
}
var output = new JArray();
output.Add(outputItem);
var result = output.ToString();
Console.WriteLine(result);
}
Console.WriteLine(result);
写入以下 JSON:
[
{
"Id": 1234,
"FieldName1": 2722,
"FieldName2": "06/21/2022 13:03:11",
"FieldName3": "XYZ"
}
]
基本上,@Markus 解释了如何从输入转换为输出的概念。
此解决方案与System.Linq一起使用,并且能够转换为多个对象。
如果您的数据是:
[
[ {...}, {...}, ... ], // Array 1
[ ], // Array 2
...
]
JArray
。using System.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
var result = JArray.Parse(json)
.Select(x =>
{
Dictionary<string, dynamic> dict = new ();
foreach (JObject jObj in x.ToObject<List<JObject>>())
{
dict.Add(jObj["FieldName"].ToString(), Int32.TryParse(jObj["Value"].ToString(), out int @value) ? @value : jObj["Value"].ToString());
}
return dict;
})
.ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.