繁体   English   中英

如何将JSON属性值转换为键和值数组

[英]How to convert JSON property value to array of keys and values

我正在使用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;

[编辑] DataTable只有2列:Property_Name,&Property_Value我正在将它序列化

    JsonConvert.SerializeObject(myDataTable);

我可能会使用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变量应该是你想要的格式而不需要使用正则表达式。

看看Newtonsoft.Json.Linq命名空间。 它包含像JObject,JArray和JToken这样的类来实现你想要做的事情。

这是一个简短的片段,可以帮助您:

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的Descendants,查找键“Value”或其他内容,将其从字符串转换为JObject,就像我的代码示例一样。

您只需将响应解析为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() 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM