如何将 JSON 属性值转换为键和值数组
Posted
技术标签:
【中文标题】如何将 JSON 属性值转换为键和值数组【英文标题】:How to convert JSON property value to array of keys and values 【发布时间】:2020-01-06 18:12:35 【问题描述】:我正在使用 Newtonsoft.JSON 将 DataTable 序列化为单个 JSON 有效负载。
生成的有效载荷如下所示:
[
"Name" : "Example_Name_1",
"Value": "Example Value 1"
,
"Name" : "Example_Name_2",
"Value": "Example Value 2"
,...
]
为了与外部库一起使用,我需要它喜欢:
[
"Name" : "Example_Name_1",
"Value":
"Value": "Example Value 1"
,
"Name" : "Example_Name_2",
"Value":
"Value": "Example Value 2"
,...
]
有什么方法可以进行这种转换吗? 我一直在研究正则表达式,但没有任何运气。
我一直在使用不同的正则表达式模式,我看到了另一个类似的 SO 解决方案,但使用了 javascript 映射?
var strJson = "[\"Name\": \"Example_Name_1\",\"Value\": \"Example Value 1\"]";
var pattern = "\"Name\": \"*\",\"Value\": \"*\"";
var replacement = "\"Name\": \"*\",\"Value\": \"Value\": \"*\"";
var input = strJSON;
var result = Regex.Replace(input, pattern, replacement);
return result;
[编辑] 数据表只有 2 列:Property_Name 和 Property_Value 我正在序列化它
JsonConvert.SerializeObject(myDataTable);
【问题讨论】:
请也提供序列化码 @ingvar 'JsonConvert.SerializeObject(myDataTable);' 【参考方案1】:我可能会使用 LINQ 将数据表转换为您喜欢的格式。您没有提供实际的数据表,但转换将是这样的:
IEnumerable<Data> yourData = GetData();
var transformedData = yourData.Select(d => new
Name = d.Name,
Value = new
Value = d.Value
);
string json = JsonConvert.SerializeObject(transformedData);
json
变量现在应该(希望)采用您想要的格式,而无需使用正则表达式。
【讨论】:
【参考方案2】:看看 Newtonsoft.Json.Linq 命名空间。它包含 JObject、JArray 和 JToken 等类来实现您想要做的事情。
这里有一个简短的 sn-p 开始:
var strJson = "[\"Name\": \"Example_Name_1\",\"Value\": \"Example Value 1\"]";
var newObject = JArray.Parse(strJson);
for(int i = 0; i < newObject.Count; i++)
newObject[i]["Value"] = new JObject()
"Value", newObject[i]["Value"]
;
您可以遍历原始 JObject 的后代,查找键“Value”或其他内容,以将其从字符串转换为 JObject,就像我的代码示例一样。
【讨论】:
System.ArgumentException: '无法将 Newtonsoft.Json.Linq.JValue 添加到 Newtonsoft.Json.Linq.JObject。' @Rhystic,我更新了答案,使其正常工作。这次我测试了代码:) 为了得到一个缩小的Json字符串,我添加了:return newObject.ToString(Formatting.None);【参考方案3】:您可以将响应解析为 json 并循环访问数据以创建新对象。 请查看我使用您的示例数据创建的代码。
var runCode = function()
var strJson = "[\"Name\": \"Example_Name_1\",\"Value\": \"Example Value 1\",\"Name\": \"Example_Name_2\",\"Value\": \"Example Value 2\"]";
parsedJson = JSON.parse(strJson)
new_json = []
for (var i = 0; i < parsedJson.length; i++)
temp_json =
temp_json['Name'] = parsedJson[i]['Name']
temp_json['Value'] =
'Value': parsedJson[i]['Value']
new_json.push(temp_json)
console.log(new_json)
runCode()
【讨论】:
截图看起来效果很好。您介意将其转换为 C# 函数吗? @Rhystic 对此感到抱歉,但我对 c# 不太了解。但是您可以使用此逻辑循环遍历 json。您需要做的就是遍历 json 并将值存储在临时字典中,然后将其附加到列表中以上是关于如何将 JSON 属性值转换为键和值数组的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用 Scala-Play Json 框架解析 Json 时获取键和值?