如何将新项目添加到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接口获得。现在我需要知道如何将成员添加到现有组。添加后,我需要将其保存在内存中,以便下次加载应用程序时,它将显示四个成员。我想添加第四个成员详细信息:
最后的json文件应该是这样的:"UniqueId":"城市"、"名称":"亚亚","JerseyNumber":"5","位置":"中场"
{
"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对象:
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并将其复制到本地文件夹