在JSON数组中查找特定选项(或者我应该如何重新格式化我的JSON文件)

时间:2014-07-29 20:29:32

标签: c# json json.net

我对JSON处理比较陌生,尝试使用JArray.Parse()从我的json数组中找到特定对象时遇到了很大的困难。

我可以完美地解析数组,但是我不确定如何在不迭代它的情况下获取数组中的特定对象,并单独检查每个对象以找到匹配项。也许我可以更好地格式化我的JSON文件,甚至可以将我项目中的两个JSON文件组合在一起。

以下是两个JSON文件:

knownshares.json

    [
        {
            "id": 1,
            "name": "Fileshare #1",
            "server": "file-server01",
            "folder": "shared-folder",
            "domain": "YOURDOMAIN"
        },
        {
            "id": 2,
            "name": "Fileshare #2",
            "server": "file-server02",
            "folder": "shared-folder",
            "domain": "YOURDOMAIN"
        }
    ]

users.json:

    [
        {
            "username": "youruser",
            "fileshares": [
                "1F",
                "2G"
            ]
        }
    ]

我之前用

完成了这项工作
    JsonConvert.DeserializeObject<List<User>>(jsonString);

但我希望能够在不读取和重写整个文件的情况下编辑文件中的特定对象。

如果您对如何更好地构建我的JSon文件有任何建议,那么这也会有所帮助。我以前习惯使用数据库,这个项目实际上并没有加载sql lite或类似的东西,所以我认为JSon是最简单的。

编辑:

我想在阅读所有人的回复之后就明白了,在JSON中,如果不覆盖整个JSON文件就不可能编辑对象,我不担心这些文件太大(可能是80个用户)至多现在更糟糕的是,如果情况变得更糟,我可以为用户对象加上时间戳并在一段时间后修剪它们。

2 个答案:

答案 0 :(得分:0)

也许您应该使用XML而不是JSON?我不这么认为你可以轻松地管理JSON文件,而无需将文件解析为c#对象。如果文件很小,则需要花费很多时间来解析它。

编辑: C#

var doc = XDocument.Load("file.xml");
var item = doc.Root.Elements("Product").Single(x => (string)x.Element("Title") == "p1").Element("Title");
item.SetValue("New_value");
doc.Save("file.xml");

XML

<?xml version="1.0" encoding="utf-8"?>
<Products>
  <Product>
    <Title>p1</Title>
    <Description>Desc1</Description>
  </Product>
  <Product>
    <Title>p2</Title>
    <Description>Desc2</Description>
  </Product>
</Products>

答案 1 :(得分:0)

我发现Newtonsoft在使用json时非常有用。在过去,我只使用XML,但自从找到Newtonsoft库以来,我更愿意使用json。它使您可以轻松地序列化和反序列化您的json对象。

https://www.nuget.org/packages/newtonsoft.json/