0

以下に示すように、いくつかの JSON をファイルに保存しています。私がやりたいことは、 を見つけてTask2、その状態を からcompleteに変更しdeleted、元のテキスト ファイルに保存し直すことです。しかし、私の人生では、これを理解することはできません。

これが私のJSONです:

{
    "tasks": [
        {
            "task"     : "Task1",
            "quantity" : "(1)",
            "state"    : "incomplete",
            "changed"  : "never"    
        },
        {
            "task"     : "Task2",
            "quantity" : "(1)",                             
            "state"    : "complete",
            "changed"  : "never"                    
        },
        {
            "task"     : "Task3",
            "quantity" : "(1)",             
            "state"    : "deleted",
            "changed"  : "never"                    
        }
    ]
}

ここに私がこれまでに持っているコードがあります(Json.Netを使用)

using (StreamReader reader = new StreamReader(fileStream))
{
    string txt = reader.ReadToEnd();

    JObject jObject = JObject.Parse(txt);
    JArray tasks = (JArray) jObject["tasks"];

    ....

    reader.Close();
}

JSON を更新するには、どのコードが必要ですか?

4

2 に答える 2

0

次のように、必要なことを非常に簡単に達成できます。

// Read the JSON file 
string json = File.ReadAllText(fileName);

// Parse the JSON
JObject jObject = JObject.Parse(json);
JArray tasks = (JArray)jObject["tasks"];

// Find the first JObject in tasks having a "task" property with a value of "Task2"
// If such an object exists, set its "state" property to "deleted"
JObject task2 = (JObject)tasks.FirstOrDefault(a => a["task"].ToString() == "Task2");
if (task2 != null)
{
    task2["state"] = "deleted";
}

// Write the JSON back to the file
File.WriteAllText(fileName, jObject.ToString());

using System.Linq;メソッドにアクセスできるようにするには、コードの先頭に含める必要があることに注意してくださいFirstOrDefault()

于 2014-12-21T22:52:46.767 に答える
0

Json.Net (http://json.codeplex.com/releases/view/89222) を使用して、その参照をプロジェクトに追加すると、次のようなことができます...

 [DataContract]
        public class TaskClass
        {
            [DataMember(Name="task")]
            public string task { get; set; }

            [DataMember(Name="quantity")]
            public string quantity { get; set; }

            [DataMember(Name="state")]
            public string state { get; set; }

            [DataMember(Name = "changed")]
            public string changed { get; set; }
        }

        [DataContract]
        public class Tasks
        {
            [DataMember(Name = "tasks")]
            public IEnumerable<TaskClass> tasks { get; set; }
        }

//and you can deserialize json :

    string json = "{\"tasks\":[{\"task\": \"Task1\",\"quantity\": \"(1)\",\"state\": \"incomplete\",\"changed\": \"never\"},{\"task\": \"Task2\",\"quantity\": \"(1)\",\"state\": \"complete\",\"changed\": \"never\"},{\"task\":\"Task3\",\"quantity\": \"(1)\",\"state\": \"deleted\",\"changed\": \"never\" }]}";

            Tasks allTasks = new Tasks();
            allTasks = JsonConvert.DeserializeObject<Tasks>(json);

            foreach (TaskClass task in allTasks.tasks)
            {
                if (task.task.ToLower() == "task2")
                {
                    task.state = "deleted";
                }
            }

//and serialize it again as :

string value = JsonConvert.SerializeObject(objTasks);
于 2012-07-16T09:44:34.407 に答える