如何在Json数组中查找特定项并在c#中进行操作

时间:2015-05-05 02:41:30

标签: c# json

我有一个复杂的json文件,我可以拥有多种类型的资源,类型也可以重复。鉴于此,我有两个问题,我试图在网上搜索,但没有发现任何线索。

  1. 如何找到特定类型的type3资源对象,它可以返回多个结果

  2. 一旦找到特定资源,我想再添加一个属性并将其保存为json

    { 
    "resources": [{
        "type": "type1",
        "name": "dummy1",
        "properties": {
            "p1": "v1"
        }
    }, {
        "type": "type2",
        "name": "dummy2",
        "properties": {
            "p1": "v1",
            "p2": {
                "k1": "v1"
            }
        }
    }, {
        "type": "type3",
        "name": "dummy3",
        "properties": {
            "p1": {
                "k1": "v1"
            },
            "p2": {
                "k1": "v1",
                "k2": "v2"
            }
        }
    }, {
        "type": "type3",
        "name": "dummy4",
        "properties": {
            "p1": {
                "k1": "v1"
            },
            "p2": {
                "k1": "v1",
                "k2": "v2"
            }
        }
        }]
    }
    

1 个答案:

答案 0 :(得分:2)

首先,获取一个JSON库。我建议Newtonsoft.Json(安装为NuGet包)。

我正在使用File api,但以另一种方式构建JObject非常容易。 ToString调用再次返回JSON字符串。我也使用Linq来查找类型为type3的数组元素。

JObject jObject = JObject.Load(
    new JsonTextReader(File.OpenText("Data.json")));
JArray resources = (JArray)jObject["resources"];
foreach (var type3Resource in resources
    .Where(obj => obj["type"].Value<string>() == "type3"))
{
    type3Resource["SpecialValue"] = 3;
}

File.WriteAllText("Data2.json", 
    jObject.ToString(Formatting.Indented));