600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 新浪微博数据Json格式解析

新浪微博数据Json格式解析

时间:2022-04-30 06:28:26

相关推荐

新浪微博数据Json格式解析

独角兽企业重金招聘Python工程师标准>>>

Json格式解析

json结构的格式就是若干个 键/值(key, value) 对的集合,该集合可以理解为字典(Dictionary),每个 键/值 对可以理解成一个对象(Object)。 键/值 对中的 键(key) 一般是 一个string,值(value)可以是string、double、int等基本类型,也可以嵌套一个 键/值 对,也可以是一个数组,数组里面的数据的类型可以是基本类型,或者 键/值 对。可以看出 键/值 本来没什么,只是嵌套得多了就会觉得混乱,下面举个具体的例子来说明。注:该代码只是用来举例说明,并不能正确运行。

1 var testJson = {

2"Name" : "奥巴马" ,

3"ByName" : ["小奥","小巴","小马"],

4"Education" : {

5 "GradeSchool" : "华盛顿第一小学",

6 "MiddleSchool" : ["华盛顿第一初中" , "华盛顿第一高中"],

7 "University" : {

8 "Name" : "哈佛大学",

9 "Specialty" : ["软件工程","会计"]

10 }

11}

12 }

变量testJson就是一个json对象,testJson对象包括三个 键/值 对。

第一个 键/值 对:键(key)是"Name“ ,其对应的值(value)是 "奥巴马" ,即 testJson["Name"] == "奥巴马"

第二个 键/值 对: 键 是 "ByName" ,值是一个数组,是一个string集合。有必要的话,数组里面的元素也可以是 键/值 对。

第三个 键/值 对: 键 是 "Education",值是一个Json对像,该json对象包括三个 键/值 对,这就是嵌套了。

总结:json对象就是若干个 键/值 对的集合,键是string,值可以是基本类型,或者嵌套一个Json对象,或者是一个数组(数组里的元素可以是基本类型,也可以是json对象,可以继续嵌套)。

获取名字:testJson["Name"]

获取第一个别名:testJson["ByName"][0] 。testJson的 键"ByName" 对应的值 是一个string数组

获取小学名字: testJson["Education"]["GradeSchool"] , 获取大学主修专业:testJson["Education"]["University"]["Specialty"][0]

下面举个实例:

定义一个符合json格式要求的字符串:

string testJson = "{\"Name\" : \"奥巴马\",\"ByName\" : [\"小奥\",\"小巴\",\"小马\"],\"Education\":{\"GradeSchool\" : \"华盛顿第一小学\",\"MiddleSchool\" : [\"华盛顿第一初中\" , \"华盛顿第一高中\"], \"University\" :{ \"Name\" : \"哈佛大学\", \"Specialty\" : [\"软件工程\",\"会计\"]}}}";

然后需要用该字符串作为参数new 一个 JsonObject对象。微软自带的类库 System.Json ,然后添加命名空间 using System.Json;

主要代码就一句:JsonObject js = JsonObject.Parse(testJson); 用字符串testJson 作为参数new 一个 JsonObject 对象。通过监视我们可以看到js里面的内容和预料的一样,通过下面这幅图你应该可琢磨出很多东西来吧

在做这个之前我对JSON解析了解的不是很多,只能对一些简单的数据解析,对于稍微复杂一点的结构就一筹莫展了,在网上找了很多资料也没能解决

后来看了这个帖子,终于稍微摸到了一点门道:/iiloveloveyouyou/blog/item/cec41b1d5ccdf48087d6b68e.html/cmtid/465fd0f12cea96cc7931aa9a

首先先看一下新浪微博目前的JSON的结构

[html]view plain copy print ?

{

"statuses":[

{//位置1

"created_at":"TueMay3117:46:55+0800",//位置2

"id":11488058246,

"text":"求关注。",

"source":"<ahref=""rel="nofollow">新浪微博</a>",

"favorited":false,

"truncated":false,

"in_reply_to_status_id":"",

"in_reply_to_user_id":"",

"in_reply_to_screen_name":"",

"geo":null,

"mid":"5612814510546515491",

"reposts_count":8,

"comments_count":9,

"annotations":[],

"user":{//位置3

"id":1404376560,

"screen_name":"zaku",

"name":"zaku",

"province":"11",

"city":"5",

"location":"北京朝阳区",

"description":"人生五十年,乃如梦如幻;有生斯有死,壮士复何憾。",

"url":"/zaku",

"profile_image_url":"/1404376560/50/0/1",

"domain":"zaku",

"gender":"m",

"followers_count":1204,

"friends_count":447,

"statuses_count":2908,

"favourites_count":0,

"created_at":"FriAug2800:00:00+0800",

"following":false,

"allow_all_act_msg":false,

"remark":"",

"geo_enabled":true,

"verified":false,

"allow_all_comment":true,

"avatar_large":"/1404376560/180/0/1",

"verified_reason":"",

"follow_me":false,

"online_status":0,

"bi_followers_count":215

}

},

...

],

"previous_cursor":0,//位置4

"next_cursor":11488013766,

"total_number":81655

}

{"statuses":[{//位置1"created_at":"TueMay3117:46:55+0800",//位置2"id":11488058246,"text":"求关注。","source":"<ahref=""rel="nofollow">新浪微博</a>","favorited":false,"truncated":false,"in_reply_to_status_id":"","in_reply_to_user_id":"","in_reply_to_screen_name":"","geo":null,"mid":"5612814510546515491","reposts_count":8,"comments_count":9,"annotations":[],"user":{//位置3"id":1404376560,"screen_name":"zaku","name":"zaku","province":"11","city":"5","location":"北京朝阳区","description":"人生五十年,乃如梦如幻;有生斯有死,壮士复何憾。","url":"/zaku","profile_image_url":"/1404376560/50/0/1","domain":"zaku","gender":"m","followers_count":1204,"friends_count":447,"statuses_count":2908,"favourites_count":0,"created_at":"FriAug2800:00:00+0800","following":false,"allow_all_act_msg":false,"remark":"","geo_enabled":true,"verified":false,"allow_all_comment":true,"avatar_large":"/1404376560/180/0/1","verified_reason":"","follow_me":false,"online_status":0,"bi_followers_count":215}},...],"previous_cursor":0,//位置4"next_cursor":11488013766,"total_number":81655}

#笔记#这里孙亿要提一下,使用新浪SDK获得的json字符串和官方网站上略有不同,不用第三方开源包获取到的Json数据是没有statuses的而且第一个字符是[ ],这里注意一下就行,以官方接口为主,可能是接口方法把前面的去掉了。

将上面的数据简化一下就是下面的结构,K代表key,V代表value

[html]view plain copy print ?

{

K:[

{//位置1

K:V,//位置2

K:{K:V}//位置3

},

{//位置1

K:V,//位置2

K:{K:V}//位置3

},

......

],

K:V//位置4

}

{K:[{//位置1K:V,//位置2K:{K:V}//位置3},{//位置1K:V,//位置2K:{K:V}//位置3},......],K:V//位置4}

好了,现在我们开始一点一点的去解析它

首先最外面的一层大括号{ ..... },这个应该使用JSONObject()去获取对象

[html]view plain copy print ?

JSONObjectjsonObject=newJSONObject(json);

JSONObjectjsonObject=newJSONObject(json);

位置1的数据需要一个getJSONArray()方法去获取,因为他是一个数组,[ ]之间的每一个{ ..... }代表数组的一个元素

[html]view plain copy print ?

JSONArraystatusesArr=jsonObject.getJSONArray("statuses");

JSONArraystatusesArr=jsonObject.getJSONArray("statuses");

此时位置1的元素需要将其转化为JsonObject类

此时有2种办法可以转化

第一种:

[html]view plain copy print ?

JSONObjectstatusesObj=statusesArr.getJSONObject(0);//这里的0代表的就是第一个{},以此类推

JSONObjectstatusesObj=statusesArr.getJSONObject(0);//这里的0代表的就是第一个{},以此类推

第二种:

[html]view plain copy print ?

StringstatusesStr=statusesArr.getString(0);

JSONObjectstatusesObj=newJSONObject(statusesStr);

StringstatusesStr=statusesArr.getString(0);JSONObjectstatusesObj=newJSONObject(statusesStr);

这个时候我们就可以获取位置2的数据了

[html]view plain copy print ?

statusesObj.getString("created_at");

statusesObj.getString("created_at");

位置3的数据又有点比较搞了,直接贴代码

[html]view plain copy print ?

Stringuser=statusesObj.getString("user");//获取位置3的值

JSONObjectuserObj=newJSONObject(user);//将其转化为JSONObject

Stringname=userObj.getString("name");//使用get方法获取数据

Stringuser=statusesObj.getString("user");//获取位置3的值JSONObjectuserObj=newJSONObject(user);//将其转化为JSONObjectStringname=userObj.getString("name");//使用get方法获取数据

位置4的数据获取很简单,使用普通的get方法就可以获得

[html]view plain copy print ?

jsonObject.getInt("total_number");

Java解析Json

包支持:org.json.jar

第一个:

String js = "{'a':'111','b':'333','c':'666'}";

try {

JSONObject jsonObject01 = new JSONObject(js);

String a = jsonObject01.getString("a");

String b = jsonObject01.getString("b");

String c = jsonObject01.getString("c");

System.out.println(a+b+c);

} catch (JSONException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

第二个:

String json = "{'name': '呵呵','array':[{'a':'111','b':'222','c':'333'},{},{'a':'999'}],'address':'上海'}";

try {

JSONObject jsonObject = new JSONObject(json);

String name = jsonObject.getString("name");

String address = jsonObject.getString("address");

System.out.println("name is:" + name);

System.out.println("address is:" + address);

JSONArray jsonArray = jsonObject.getJSONArray("array");

for (int i = 0; i < jsonArray.length(); i++) {

System.out.println("item " + i + " :" + jsonArray.getString(i));

}

} catch (JSONException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。