2010-07-08 25 views
8

Ví dụ:Làm cách nào để sử dụng tốt nhất Json.NET để sửa đổi các phần của đối tượng JSON hiện có?

Tôi có đối tượng JSON sau.

{"currentVersion" : "10.0", 
    "folders" : [], 
    "services" : [ 
    {"name" : "nyc", "type" : "MapServer"}, 
    {"name" : "philly", "type" : "MapServer"} 
    ] 
} 

Tôi muốn có thể xóa một hoặc nhiều mục khỏi mảng dịch vụ dựa trên giá trị của thuộc tính name. Ví dụ, tôi muốn tìm kiếm tên = "nyc" và loại bỏ đối tượng sau khỏi mảng.

{"name" : "nyc", "type" : "MapServer"} 

Kết quả cuối cùng là một đối tượng mà trông như thế này:

{"currentVersion" : "10.0", 
    "folders" : [], 
    "services" : [ 
    {"name" : "philly", "type" : "MapServer"} 
    ] 
} 

tôi đã có thể để tạo ra đối tượng JSON mới khá dễ dàng và tôi có thể đọc những cái hiện có. Tuy nhiên, tôi đang gặp khó khăn trong việc xác định cách tốt nhất để sửa đổi một đối tượng JSON hiện có. Đặc biệt là nó liên quan đến truy vấn cho các đối tượng cụ thể trong đối tượng JSON.

Một phương pháp mà tôi đã phát hiện (cụ thể cho ví dụ này) là xây dựng lại các phần của JSON mà tôi muốn sửa đổi và thay thế mã thông báo khi cần thiết. Tuy nhiên, tôi phải nghĩ rằng có một cách tốt hơn. Mã này được hiển thị bên dưới.

string json = @"{""currentVersion"" : ""10.0"", 
        ""folders"" : [], 
        ""services"" : [ 
         {""name"" : ""nyc"", ""type"" : ""MapServer""}, 
         {""name"" : ""philly"", ""type"" : ""MapServer""} 
        ] 
       }"; 

string[] keepList = new string[] { "nyc" }; 

JObject o = JObject.Parse(json); 
JArray services = (JArray)o["services"]; 
JArray newServices = new JArray(); 

foreach (JToken service in services) 
{ 
    foreach (string keeper in keepList) 
    { 
     if ((string)service["name"] == keeper) 
     { 
      newServices.Add(service); 
      break; 
     } 
    } 
} 

services.Replace(newServices); 

string output = o.ToString(); 

Làm cách nào để sử dụng Json.NET để sửa đổi các phần của đối tượng JSON hiện có?

Trả lời

8

Tôi chưa xác định được một cách thay thế để sửa đổi JSON hiện có so với những gì được cung cấp trong câu hỏi gốc. Nếu một cách tốt hơn bề mặt tôi sẽ sẵn sàng chấp nhận rằng như là câu trả lời đúng.

Trong khi chờ đợi, giải pháp mà tôi đã triển khai là thay thế các phần của đối tượng JSON mà tôi cần sửa đổi với các đối tượng mới được tạo. Một ví dụ đã được biểu diễn ở dưới.

string json = @"{""currentVersion"" : ""10.0"", 
        ""folders"" : [], 
        ""services"" : [ 
         {""name"" : ""nyc"", ""type"" : ""MapServer""}, 
         {""name"" : ""philly"", ""type"" : ""MapServer""} 
        ] 
       }"; 

string[] keepList = new string[] { "nyc" }; 

JObject o = JObject.Parse(json); 
JArray services = (JArray)o["services"]; 
JArray newServices = new JArray(); 

foreach (JToken service in services) 
{ 
    foreach (string keeper in keepList) 
    { 
     if ((string)service["name"] == keeper) 
     { 
      newServices.Add(service); 
      break; 
     } 
    } 
} 

services.Replace(newServices); 

string output = o.ToString(); 
Các vấn đề liên quan