我对JSON处理相当陌生,并且尝试使用java . 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个用户),如果情况越来越糟,我可以为用户对象添加时间戳,并在一段时间后修剪它们。
也许你应该使用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>
我发现Newtonsoft在使用json时非常有用。在过去,我只使用XML,但自从找到Newtonsoft库以来,我更喜欢使用json。它可以很容易地序列化和反序列化json对象。
https://www.nuget.org/packages/newtonsoft.json/