收缩/剥离给定的JSON对象

时间:2012-05-18 20:25:54

标签: json json.net

一个.net服务从twitter给我这个,我只需要大约五个字段,我已经用JSON给出了,只是JSON对象的数组可能非常大而且似乎没有必要服务于客户端的大JSON文件与小的一个,例如目的只包含JSON中的一个Object,可能会非常多..问题是如何在js文件中提供它之前收缩,所以以某种后端方式解析,所以只提供我需要的属性。

var twitter_peeps = {
twitterFeedData:
 [{
    "in_reply_to_user_id_str":null,
    "truncated":false,
    "contributors":null,
    "created_at":"Fri May 18 19:20:34 +0000 2012",
    "in_reply_to_screen_name":null,
    "favorited":false,
    "geo":null,
    "user":{
       "id":16819632,
       "verified":false,
       "default_profile":true,
       "profile_background_color":"C0DEED",
       "statuses_count":8595,
       "following":true,
       "time_zone":"Central Time (US & Canada)",
       "profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png",
       "profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/62250922\/Garrett_and_Michael_8_X_10_2_22-54-34_normal.jpg",
       "utc_offset":-21600,
       "profile_link_color":"0084B4",
       "followers_count":12883,
       "listed_count":542,"name":"Garrett Weber-Gale",
       "notifications":false,
       "protected":false,"id_str":"16819632",
       "profile_use_background_image":true,
       "screen_name":"G_WeberGale",
       "is_translator":false,
       "profile_text_color":"333333",
       "profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/62250922\/Garrett_and_Michael_8_X_10_2_22-54-34_normal.jpg",
       "friends_count":3758,
       "description":"Co-founder AthleticFoodieTM. High blood pressure warrior. In love w food\/cooking! Working 2 get better @ everything",
       "profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png",
       "default_profile_image":false,
       "url":"http:\/\/www.athleticfoodie.com",
       "profile_sidebar_border_color":"C0DEED",
       "favourites_count":20,
       "created_at":"Fri Oct 17 03:35:09 +0000 2008",
       "contributors_enabled":false,
       "geo_enabled":true,
       "profile_background_tile":false,
       "lang":"en","profile_sidebar_fill_color":"DDEEF6",
       "show_all_inline_media":false,
       "follow_request_sent":false,
       "location":"Austin, Texas"
    },
    "retweet_count":0,
    "coordinates":null,
    "in_reply_to_user_id":null,
    "source":"\u003Ca href=\"http:\/\/www.hootsuite.com\" rel=\"nofollow\"\u003EHootSuite\u003C\/a\u003E",
   "in_reply_to_status_id_str":null,
   "id_str":"203565761040629760",
   "place":null,
   "in_reply_to_status_id":null,
   "id":203565761040629760,
   "possibly_sensitive":false,
   "retweeted":false,
   "text":"Awesome! Good for you:) \n\nRT @ATXglutenfree: My #startup, Locate Special Diet, has officially launched! http:\/\/t.co\/KyeDWZYj"
 }]
};

var twitter_peeps = {
twitterFeedData:
  [{
    "created_at":"Fri May 18 19:20:34 +0000 2012",
    "user":{
         "profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/62250922\/Garrett_and_Michael_8_X_10_2_22-54-34_normal.jpg",
         "screen_name":"G_WeberGale",
    },
    "id_str":"203565761040629760",
    "text":"Awesome! Good for you:) \n\nRT @ATXglutenfree: My #startup, Locate Special Diet, has officially launched! http:\/\/t.co\/KyeDWZYj"
  }]
};

1 个答案:

答案 0 :(得分:0)

您可以使用Json.NET将来自Web服务的响应解析为JArray。然后,您可以从响应中选择所需的唯一数据。您还可以创建一个包含所需属性的自定义对象,以将响应的一部分反序列化为。

下面是一个示例,您可以将自定义对象手动加载到响应列表中:

string json = "{\n\"twitterFeedData\":\n [{\n \"in_reply_to_user_id_str\":null,\n \"truncated\":false,\n \"contributors\":null,\n \"created_at\":\"Fri May 18 19:20:34 +0000 2012\",\n \"in_reply_to_screen_name\":null,\n \"favorited\":false,\n \"geo\":null,\n \"user\":{\n \"id\":16819632,\n \"verified\":false,\n \"default_profile\":true,\n \"profile_background_color\":\"C0DEED\",\n \"statuses_count\":8595,\n \"following\":true,\n \"time_zone\":\"Central Time (US & Canada)\",\n \"profile_background_image_url\":\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\",\n \"profile_image_url\":\"http:\\/\\/a0.twimg.com\\/profile_images\\/62250922\\/Garrett_and_Michael_8_X_10_2_22-54-34_normal.jpg\",\n \"utc_offset\":-21600,\n \"profile_link_color\":\"0084B4\",\n \"followers_count\":12883,\n \"listed_count\":542,\"name\":\"Garrett Weber-Gale\",\n \"notifications\":false,\n \"protected\":false,\"id_str\":\"16819632\",\n \"profile_use_background_image\":true,\n \"screen_name\":\"G_WeberGale\",\n \"is_translator\":false,\n \"profile_text_color\":\"333333\",\n \"profile_image_url_https\":\"https:\\/\\/si0.twimg.com\\/profile_images\\/62250922\\/Garrett_and_Michael_8_X_10_2_22-54-34_normal.jpg\",\n \"friends_count\":3758,\n \"description\":\"Co-founder AthleticFoodieTM. High blood pressure warrior. In love w food\\/cooking! Working 2 get better @ everything\",\n \"profile_background_image_url_https\":\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\",\n \"default_profile_image\":false,\n \"url\":\"http:\\/\\/www.athleticfoodie.com\",\n \"profile_sidebar_border_color\":\"C0DEED\",\n \"favourites_count\":20,\n \"created_at\":\"Fri Oct 17 03:35:09 +0000 2008\",\n \"contributors_enabled\":false,\n \"geo_enabled\":true,\n \"profile_background_tile\":false,\n \"lang\":\"en\",\"profile_sidebar_fill_color\":\"DDEEF6\",\n \"show_all_inline_media\":false,\n \"follow_request_sent\":false,\n \"location\":\"Austin, Texas\"\n },\n \"retweet_count\":0,\n \"coordinates\":null,\n \"in_reply_to_user_id\":null,\n \"source\":\"\\u003Ca href=\\\"http:\\/\\/www.hootsuite.com\\\" rel=\\\"nofollow\\\"\\u003EHootSuite\\u003C\\/a\\u003E\",\n \"in_reply_to_status_id_str\":null,\n \"id_str\":\"203565761040629760\",\n \"place\":null,\n \"in_reply_to_status_id\":null,\n \"id\":203565761040629760,\n \"possibly_sensitive\":false,\n \"retweeted\":false,\n \"text\":\"Awesome! Good for you:) \\n\\nRT @ATXglutenfree: My #startup, Locate Special Diet, has officially launched! http:\\/\\/t.co\\/KyeDWZYj\"\n }]\n}";

JObject obj = JObject.Parse(json);
JArray arr = JArray.Parse(obj["twitterFeedData"].ToString());

List<TwitterResponse> responses = new List<TwitterResponse>();

foreach (var item in arr)
{

   TwitterResponse tr = new TwitterResponse()
   {
       CreatedAt = item["created_at"].Value<string>(),
       IdStr = item["id_str"].Value<string>(),
       Text = item["text"].Value<string>(),
       User = new User() { 
           ProfileImageUrl = item["user"]["profile_image_url"].Value<string>(),
           ScreenName = item["user"]["screen_name"].Value<string>()
       }
   };

   responses.Add(tr);
}

class TwitterResponse
{
    public string CreatedAt { get; set; }
    public string Text { get; set; }
    public string IdStr { get; set; }
    public User User { get; set; }
}
class User
{
    public string ProfileImageUrl { get; set; }
    public string ScreenName { get; set; }
}