JSON数据解析的有点在于他的体积小,在网络上传输的时候可以更省流量,所以使用越来越广泛,下面介绍使用JsonObject和JsonArray的两种方式解析Json数据。

使用以上两种方式解析json均需要依赖json-lib.jar开发包使用依赖包

1、JsonObject

使用JsonObject解析只有一条数据的json是非常方便的例如:"{\"name\":\"zhangsan\",\"password\":\"zhangsan123\",\"email\":\"10371443@qq.com\"}"

public static void main(String[] args) {

String jsonString ="{\"name\":\"zhangsan\",\"password\":\"zhangsan123\",\"email\":\"10371443@qq.com\"}";

JSONObject json = JSONObject.fromObject(jsonString);

User user = new User();

user.setName(json.getString("name"));

user.setPassword(json.getString("password"));

user.setEmail(json.getString("email"));

System.out.println(user.toString());

}

2、JsonArray

使用JsonArray解析数组数据的json是非常方便的例如:"[{\"name\":\"zhangsan\",\"password\":\"zhangsan123\",\"email\":\"10371443@qq.com\"},{\"name\":\"lisi\",\"password\":\"lisi123\",\"email\":\"1435123@qq.com\"}]"

String json = "[{\"name\":\"zhangsan\",\"password\":\"zhangsan123\",\"email\":\"10371443@qq.com\"},{\"name\":\"lisi\",\"password\":\"lisi123\",\"email\":\"1435123@qq.com\"}]";

JSONArray jsonArray = JSONArray.fromObject(json);

ArrayList users = new ArrayList();

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

User userM = new User();

user.setName(jsonArray.getJSONObject(i).getString("name"));

user.setpassword(jsonArray.getJSONObject(i).getString("password"));

user.setEmail(jsonArray.getJSONObject(i).getString("email"));

users.add(user);

}

for (User user : users) {

System.out.println(user.toString());

}

通过以上两种方式可以解析不同格式的json数据

这段时间我们在做一个英语翻译软件的小小小APP,涉及到了对Json数据的解析,所以特地来总结一下!

假设我们要对如下数据进行解析,其实在平时,返回的Json数据是很乱的,很难分清数据的关系,这是经过相关工具美化后的结果

{

"translation": [

"爱"

],

"basic": {

"us-phonetic": "lʌv",

"phonetic": "lʌv",

"uk-phonetic": "lʌv",

"explains": [

"n. 恋爱;亲爱的;酷爱;喜爱的事物",

"vt. 喜欢;热爱;爱慕",

"vi. 爱",

"n. (Love)人名;(英)洛夫"

]

},

"web": [

{

"value": [

"爱情",

"爱",

"爱"

],

"key": "Love"

},

{

"value": [

"无尽的爱",

"蓝色生死恋",

"不了情"

],

"key": "Endless Love"

},

{

"value": [

"早恋",

"青春期恋爱",

"初恋"

],

"key": "puppy love"

}

]

}

我们把数据定义为一个字符串,加入转义字符之后就成了这样,有点乱是吧,所以我们根据上图分析就好啦。

Json数据说白了就是对象和数组的相互嵌套,那么我们开始吧!

String st = "{\"translation\":[\"爱\"],\"basic\":{\"us-phonetic\":\"lʌv\",\"phonetic\":\"lʌv\",\"uk-phonetic\":\"lʌv\",\"explains\":[\"n. 恋爱;亲爱的;酷爱;喜爱的事物\",\"vt. 喜欢;热爱;爱慕\",\"vi. 爱\",\"n. (Love)人名;(英)洛夫\"]},\"query\":\"love\",\"errorCode\":0,\"web\":[{\"value\":[\"爱情\",\"爱\",\"爱\"],\"key\":\"Love\"},{\"value\":[\"无尽的爱\",\"蓝色生死恋\",\"不了情\"],\"key\":\"Endless Love\"},{\"value\":[\"早恋\",\"青春期恋爱\",\"初恋\"],\"key\":\"puppy love\"}]}";

JSONObject str = JSONObject.fromObject(st);                 //json数据的最外层肯定是一个对象,参数为字符串

//对象str又分为3部分:translation,basic,web

if(str.has("translation")){

JSONArray tr = str.getJSONArray("translation");               //translation是一个json数组

for(int i = 0 ;i

System.out.println(tr.getString(i));              //因为元素的值是String类型的所以忽的值的方法是getString(index)

}

}

//basic中有数组也有元素

if(str.has("basic")){

JSONObject us = str.getJSONObject("basic");               //对元素进行解析,并输出元素的值

System.out.print("美:[" + us.getString("us-phonetic") + "]\t");

JSONObject uk = str.getJSONObject("basic");

System.out.print("英:[" + us.getString("uk-phonetic") + "]\n");

JSONObject basic = str.getJSONObject("basic");              //先获得basic对象

JSONArray explain = basic.getJSONArray("explains");            //再获得basic对象下的explains数组

for(int i = 0;i

System.out.println(explain.getString(i));

}

}

if(str.has("web")){                               //web是一个数组,每个数组元素又是三个Json对象

System.out.println("拓展:");

JSONArray web = str.getJSONArray("web");

for(int i = 0; i

String t = web.getString(i);                   //遍历过程将web数组元素赋给String型变量

JSONObject we = JSONObject.fromObject(t);             //通过String又得到每个元素的对象

if(we.has("key")){

System.out.print(we.getString("key")+"\t");        //得到对象中的元素

}

if(we.has("value")){

JSONArray value = we.getJSONArray("value");

for(int x = 0 ; x

System.out.print(value.getString(x));       //得到数组元素的值

if(x

System.out.print(";");

}

}

}

System.out.println();

}

}

到这里就解析完啦!

java 字符串转成 json 数组并且遍历

当需要把一串字符串转成一个json 数组 ,并遍历其中的内容时。

首页导入 net.sf.json.JSONArray和net.sf.json.JSONObject 两个jar 包

String str = "[{name:'a',value:'aa'},{name:'b',value:'bb'},{name:'c',value:'cc'},{name:'d',value:'dd'}]" ;  // 一个未转化的字符串

JSONArray json = JSONArray.fromObject(str ); // 首先把字符串转成 JSONArray  对象

if(json.size()>0){

for(int i=0;i

JSONObject job = json.getJSONObject(i);  // 遍历 jsonarray 数组,把每一个对象转成 json 对象

System.out.println(job.get("name")+"=") ;  // 得到 每个对象中的属性值

}

}

java提取json中某个数组的所有值

public class JsonExtracter {

public static void main(String[] args) {

String s = "{\"name\":\"a\",\"family\":[\"张三\",\"李四\"]}";

JSONObject jsonObject = JSON.parSEObject(s);

//注意:family中的内容带有中括号[],所以要转化为JSONArray类型的对象

JSONArray family = jsonObject.getJSONArray("family");

for (int i = 0; i < family.size(); i++) {

//提取出family中的所有

String s1 = (String) family.get(i);

System.out.println("currentFamily:" + s1);

}

}

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐