如何在 Json 文件中 update/modify 值

How to update/modify values in Json File

我想在 c#

中更新以下类型的 json 文件中的值
{"ItemName":"ABC","Id":1}
{"ItemName":"DEF","Id":2}
{"ItemName":"GHI","Id":3}
{"ItemName":"ABC","Id":1}
{"ItemName":"JKL","Id":2}
{"ItemName":"MNO","Id":3}

我如何删除基于 'ItemName' 的重复值而不是更新 ID。像预期的输出将是:

{"ItemName":"ABC","Id":1}
{"ItemName":"DEF","Id":2}
{"ItemName":"GHI","Id":3}

{"ItemName":"JKL","Id":4}
{"ItemName":"MNO","Id":5}

我搜索了很多有关 json.writer 函数的信息,但找不到不使用 [] 和 , 分隔符的文件解决方案。

但是我可以使用下面的代码读取文件

var jsonReader = new JsonTextReader(new StringReader(File.ReadAllText("path")))
    {
        SupportMultipleContent = true
    };
var jsonSerializer = new JsonSerializer();

dynamic data = jsonSerializer.Deserialize(jsonReader);

while (jsonReader.Read())
        {                       
            String Items_name = data.ItemName;
        }

你有一个 class 值得:

public record X(string ItemName, int Id);

您阅读了文件中的每一行:

var xs = File.ReadAllLines("path").Select(l => JsonConvert.DeserializeObject<X>(l)).ToList();

您删除了重复项:

var deduped = xs.DistinctBy(x => x.ItemName);

并执行您的其他操作等(也许您会想在上面调用 ToList)。然后你重新序列化:

File.WriteAllLines("path", deduped.Select(x => JsonConvert.SerializeObject(x)).ToArray());