我有一個以.json文件看起來像這樣:找到一個JSON項並添加一個嵌套元素
[
{
"username": "John",
"currency": 8,
"pulls":
[
{
"character": "person"
},
{
"character": "loved one"
}
]
},
{
"username": "Mike",
"currency": 2,
"pulls":
[
{
"character": "noone"
}
]
},
{
"username": "Clara",
"currency": 5,
"pulls":
[
{
"character": "someone"
}
]
}
]
我設法到目前爲止做的就是修改「貨幣」:
bool userExists = false;
string jsonPointsString = File.ReadAllText(userPath);
dynamic jsonObjects = JsonConvert.DeserializeObject(jsonPointsString);
foreach (var jsonObject in jsonObjects)
{
if (jsonObject["username"] == user)
{
jsonObject["currency"] += value;
string output = JsonConvert.SerializeObject(jsonObjects, Formatting.Indented);
File.WriteAllText(userPath, output);
userExists = true;
}
}
以及從頭開始添加一個全新的條目:
JsonCollection.User user = new JsonCollection.User();
user.username = username;
user.currency = 10;
using (StreamReader r = new StreamReader(userPath))
{
string json = r.ReadToEnd();
List<JsonCollection.User> users = JsonConvert.DeserializeObject<List<JsonCollection.User>>(json);
users.Add(user);
newJson = JsonConvert.SerializeObject(users, Formatting.Indented);
}
File.WriteAllText(userPath, newJson);
但是,無論我嘗試什麼,我都無法添加另一個元素來「拉」。這個想法是我用一個用戶名和一個拉,兩個字符串來調用一個函數。基於用戶名變量,我必須找到相應的Json Entry,並根據pull變量在「pulls」樹中創建一個新條目。這是我能想出:
public void AddPullToUser(string user, string newPull)
{
user = "Mike"; //test value
string jsonPointsString = File.ReadAllText(userPath);
dynamic jsonObjects = JsonConvert.DeserializeObject(jsonPointsString);
foreach (var jsonObject in jsonObjects)
{
if (jsonObject["username"] == user)
{
//jsonObject["pulls"] = newPull;
JsonCollection.Character pull = new JsonCollection.Character();
pull.character = newPull;
jsonObject["pulls"] = pull;
string output = JsonConvert.SerializeObject(jsonObjects, Formatting.Indented);
File.WriteAllText(userPath, output);
}
}
}
如果我做這樣的系統中的JsonCollection不能轉換爲JArray但不使用JArray我不知道如何找到特定用戶的樹。 在第二步中,這將不得不進一步擴展,以避免產生重複的「拉」,但首先這一切都必須工作。
任何幫助將不勝感激。
你可以反序列化'json'到強類型的'C#'對象,然後修改你想要的條目。我認爲這會更容易。 –
檢查此[鏈接](http://www.newtonsoft.com/json/help/html/modifyjson.htm) –