我有一个json文件,格式如下:
{
"value": [
{
"ccCode": "1234",
"attributes": {
"ePCode": 23467
}
},
{
"ccCode": "1234",
"attributes": {
"ePCode": 23467
}
}
]
}
我简化了json,但它在attributes属性中有更多字段和更多嵌套属性。我正在尝试迭代值数组中的对象,并检索其两个属性。根据这两个值,我将获取第3个值,并希望将其作为附加prop添加到attributes属性中。所以最后我想要:
{
"value": [
{
"ccCode": "1234",
"attributes": {
"ePCode": 23467,
"newFlag": true
}
},
{
"ccCode": "1234",
"attributes": {
"ePCode": 23467,
"newFlag": false
}
}
]
}
我在下面创建了代码。到目前为止,我可以获取我感兴趣的属性。我的问题是尝试更新它。任何帮助将不胜感激。
string templateFile = @"C:\Users\template.json";
//rss
JObject template = JObject.Parse(File.ReadAllText(templateFile));
foreach (var record in template)
{
string name = record.Key;
JToken value = record.Value;
foreach(var obj in value)
{
//fetch two values from each json object,
//based on these , fetch a flag and then add it to the json object
var ep = obj["attributes"];
ep = ep["ePCode"].Value<int?>();
var cost = obj["ccCode"].ToString();
bool isCostValuable = isCostValuable((int)ep, cost);
///want to add a new property in the property attributes
//this is where I get stuck
foreach(JProperty prop in obj)
{
if (prop.Name == "attributes")
{
JObject first = (JObject)obj;
JArray item = (JArray)first["attributes"];
}
}
}
}
答案 0 :(得分:2)
你离得很近,你只需要通过调用ep.Add(
来替换最里面的foreach循环,然后通过调用template.ToString()
来保存你的数据;
string templateFile = @"C:\Users\template.json";
string outputFile = @"C:\Users\output.json";
//rss
JObject template = JObject.Parse(File.ReadAllText(templateFile));
foreach (var record in template)
{
string name = record.Key;
JToken value = record.Value;
foreach(var obj in value)
{
//fetch two values from each json object,
//based on these , fetch a flag and then add it to the json object
var ep = obj["attributes"];
ep = ep["ePCode"].Value<int?>();
var cost = obj["ccCode"].ToString();
bool isCostValuable = isCostValuable((int)ep, cost);
ep.Add("newFlag", isCostValuable);
}
}
File.WriteAllText(outputFile, templateFile.ToString());
答案 1 :(得分:0)
如果你有更多字段,你的代码就会变脏!!
您可以遵循以下结构:
首先,在C#中创建一些与JSON模型相同的类,如:
public class Attribute
{
public string ePCode { get; set; }
}
public class Container
{
public string ccCode { get; set; }
public List<Attribute> attributes { get; set; }
}
public class ValueContainer
{
public List<Container> value { get; set; }
}
然后只需使用Json.NET框架将这些转换为:
Json.NET是一种流行的.NET高性能JSON框架。 它是开源软件,完全免费。
ValueContainerdata = JsonConvert.DeserializeObject<ValueContainer>(templateFile);
foreach (var item in x.value)
{
item.ccCode = "new ccCode";
foreach (var attr in item.attributes)
{
attr.ePCode = "new ePCode";
}
}
之后您已经更新了数据,您只需将其更改回JSON:
var updatedJSON = JsonConvert.SerializeObject(data);