我有以下JSON,我需要将其操作为另一个JSON格式以供另一个进程使用。我的数据在某种程度上是可变的。这是一个例子:
{
"subform_12": {
"multiline_2": "Subform 1 Long Text",
"listpicker_5": "High",
"alpha_1": "SubForm 1 Text"
},
"subform_13": {
"multiline_2": "Subform 2 Long Text",
"alpha_1": "SubForm 2 Text"
}
}
变量部分是json对象的名称(例如“subform_13”)以及每个对象的名称对的数量和内容(例如“multiline_2”:“Subform 1 Long Text”)。
我需要做的是将每个节点转换为自己的json块,如下所示:
{
"subform_13": [
[{
"fieldKey": "multiline_2",
"value": "Subform 2 Long Text"
},
{
"fieldKey": "alpha_1",
"value": "SubForm 2 Text"
}
]
]
}
然后分开:
{
"subform_13": [
[{
"fieldKey": "multiline_2",
"value": "Subform 2 Long Text"
},
{
"fieldKey": "alpha_1",
"value": "SubForm 2 Text"
}
]
]
}
到目前为止,我看到我可以按如下方式遍历列表:
var json = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(
jsonString,
new Newtonsoft.Json.JsonSerializerSettings()
{
DateParseHandling = Newtonsoft.Json.DateParseHandling.None,
});
foreach (var item in json)
{
// I can see the "subform_13" and contents here in item , how do I generically extract them?
}
任何帮助表示感谢。
答案 0 :(得分:2)
以下是您的Main
方法,可以迭代所有值:
static void Main(string[] args)
{
var json = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string,JObject>>(
jsonString,
new Newtonsoft.Json.JsonSerializerSettings()
{
DateParseHandling = Newtonsoft.Json.DateParseHandling.None,
});
foreach (var item in json)
{
var key = item.Key; // "subform_12"
var val = item.Value;
Console.WriteLine(key+":");
foreach (var field in val)
{
var fieldKey = field.Key; // e.g. "multiline_2"
var fieldVal = field.Value; // e.g. "Subform 1 Long Text"
Console.WriteLine($"{fieldKey}={fieldVal.Value<string>()}");
}
Console.WriteLine();
}
}
我只是打印出价值;你可以使用这些值构建你的新对象 - 例如dynamic
。
我Main
的输出是:
subform_12:
multiline_2=Subform 1 Long Text
listpicker_5=High
alpha_1=SubForm 1 Text
subform_13:
multiline_2=Subform 2 Long Text
alpha_1=SubForm 2 Text
希望它有所帮助。
答案 1 :(得分:0)
使用linq可能有更优雅的方法,但这里的代码使用System.Web.Extensions中的普通旧JavaScriptSerializer。
有一个结果字典,如果你希望每个对象分开,你可能不需要它。
每个对象的json字符串存储在allJson列表中。
类似地,如果您想要字典对象本身,您可以在每次迭代期间将分隔符添加到列表中。
<form name="reaction" method="post" action="./send1.php">
<div class="col-md-12 xdisplay_inputx has-feedback">
<input type="text" name="product1" id="product1" class="form-control has-feedback-left" aria-describedby="inputSuccess2Status4">
<span class="fa fa-calendar-o form-control-feedback left" aria-hidden="true"></span>
<span id="inputSuccess2Status4" class="sr-only">(success)</span>
</div>
<div class="col-md-12 xdisplay_inputx has-feedback">
<input type="text" name="product2" id="product2" class="form-control has-feedback-left" aria-describedby="inputSuccess2Status4">
<span class="fa fa-calendar-o form-control-feedback left" aria-hidden="true"></span>
<span id="inputSuccess2Status4" class="sr-only">(success)</span>
</div>
<button class="btn btn-block btn-success" name="save"><i class="fa fa-check"></i> Send</button>
</form>