如何将新项目添加到JSON文件中的现有组并保存回内存

本文关键字:保存 内存 新项目 添加 文件 JSON | 更新日期: 2023-09-27 18:11:23

我有一个JSON文件,它像:

{
    "Groups": [
        {
            "UniqueId": "Footballer",
            "Region": "Europe",
            "Country": "England",
            "Members": [
                {
                    "UniqueId": "MANU",
                    "Name": "Rooney",
                    "JerseyNumber": "10",
                    "Position": "Forward"
                },
                {
                    "UniqueId": "CITY",
                    "Name": "Aguero",
                    "JerseyNumber": "16",
                    "Position": "Forward"
                },
                {
                    "UniqueId": "MANU",
                    "Name": "Nani",
                    "JerseyNumber": "7",
                    "Position": "Midfielder"
                }
            ]
        }
    ]
}

现在我想在app运行时向该组添加第四个成员。成员详细信息将从用户键入的XAML接口获得。现在我需要知道如何将成员添加到现有组。添加后,我需要将其保存在内存中,以便下次加载应用程序时,它将显示四个成员。我想添加第四个成员详细信息:

"UniqueId":"城市"、"名称":"亚亚","JerseyNumber":"5","位置":"中场"

最后的json文件应该是这样的:
{
    "Groups": [
        {
            "UniqueId": "Footballer",
            "Region": "Europe",
            "Country": "England",
            "Members": [
                {
                    "UniqueId": "MANU",
                    "Name": "Rooney",
                    "JerseyNumber": "10",
                    "Position": "Forward"
                },
                {
                    "UniqueId": "CITY",
                    "Name": "Aguero",
                    "JerseyNumber": "16",
                    "Position": "Forward"
                },
                {
                    "UniqueId": "MANU",
                    "Name": "Nani",
                    "JerseyNumber": "7",
                    "Position": "Midfielder"
                },
                {
                    "UniqueId": "CITY",
                    "Name": "Yaya",
                    "JerseyNumber": "5",
                    "Position": "Midfielder"
                }
            ]
        }
    ]
}

到目前为止,我已经能够从Json文件中读取内容:

private async Task GetSampleDataAsync()
{
    if (this._groups.Count != 0)
        return;
    Uri dataUri = new Uri("ms-appx:///DataModel/Data2.json");
    StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(dataUri);
    string jsonText = await FileIO.ReadTextAsync(file);
    JsonObject jsonObject = JsonObject.Parse(jsonText);
    JsonArray jsonArray = jsonObject["Groups"].GetArray();
    foreach (JsonValue groupValue in jsonArray)
    {
        JsonObject groupObject = groupValue.GetObject();
        DataGroup group = new DataGroup(groupObject["UniqueId"].GetString(),
                                        groupObject["Region"].GetString(),
                                        groupObject["Country"].GetString());
        foreach (JsonValue itemValue in groupObject["Members"].GetArray())
        {
            JsonObject itemObject = itemValue.GetObject();
            group.Items.Add(new DataItem(itemObject["UniqueId"].GetString(),
                                         itemObject["Name"].GetString(),
                                         itemObject["JerseyNumber"].GetString(),
                                         itemObject["Position"].GetString()));
        }
        this.Groups.Add(group);
    }
}

请帮我添加新成员并将JSON保存回内存。简而言之,如何向JSON添加新数据并覆盖旧数据?

如何将新项目添加到JSON文件中的现有组并保存回内存

你可以这样创建一个新的JSON对象:

JsonObject newGroupObject = new JsonObject();
newGroupObject.Add("UniqueId", JsonValue.CreateStringValue("UniqueId"));
newGroupObject.Add("Name", JsonValue.CreateStringValue("Yaya"));
newGroupObject.Add("JerseyNumber", JsonValue.CreateStringValue("5"));
newGroupObject.Add("Position", JsonValue.CreateStringValue("Midfielder"));
// Output:
// {"UniqueId":"UniqueId","Name":"Yaya","JerseyNumber":"5","Position":"Midfielder"}
Debug.WriteLine(newGroupObject.Stringify());

然后,将新的JSON对象添加到JSON数组中:

// TODO: Replace following line with code that loads and parses the
// JSON string from a file.
JsonObject jsonObject = JsonObject.Parse("{'"Groups'": [{'"Members'": []}]}");
JsonArray groupsArray = jsonObject.GetNamedArray("Groups");
JsonObject firstObject = groupsArray.GetObjectAt(0);
JsonArray membersArray = firstObject.GetNamedArray("Members");
membersArray.Add(newGroupObject);

最后,将根JSON对象字符串化并持久化到一个文件:

StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(
    "Data2.json",
    CreationCollisionOption.ReplaceExisting);
await FileIO.WriteTextAsync(
    file,
    jsonObject.Stringify());

你读取你的文件到*stringjsonText *所以如果你有一个原始文本。使用这个代码

怎么样?
stringjsonText.Replace("]}]}", +"," + rowOftextyouwant + "]}]}");

查找"]}]}"的最后几个字符,我假设它们在文件中的任何地方都不会重复,并将它们替换为准备好的文本。因为在你添加的每一行之前都有一个逗号,并以你替换的相同字符结束,所以你现在需要做的就是把它保存到文件中。

拯救:

await FileIO.WriteTextAsync(file, stringjsonText);

我现在没有多少时间,这是我能想到的最快的解决方案。

如果你把它保存到安装文件夹ms-appx:///我不认为你可以写它,因为它是孤立的和只读的。试着把它放在LocalFolder中。你可以从安装文件夹中读取你的json并将其复制到本地文件夹