package com.json;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; public class JsonTest {
// 解析json(最复杂的解析方法)
public static void jieXIJSON() {
String jsonStr = "{\"errorCode\":\"0\",\"errorMsg\" :\"调用接口成功\",\"data\":[{\"username\":\"张文哲\",\"position\":\"student\"}]}";//为了避免二义性,字符串里面的双印号使用了\转义字符
JSONObject root = new JSONObject().parseObject(jsonStr);// 将json格式的字符串转换成json String errorCode = root.getString("errorCode");//定义一个字符串,其值为根据json对象中的数据名解析出的其所对应的值
String errorMsg = root.getString("errorMsg");
System.out.println("errorCode=" + errorCode + ";errorMsg=" + errorMsg); JSONArray dataArr = root.getJSONArray("data");//根据json对象中数组的名字解析出其所对应的值
System.out.println(dataArr); //对解析出的数组进行遍历
for (int i = ; i < dataArr.size(); i++) {
JSONObject dataBean = (JSONObject) dataArr.get(i);//得到数组中对应下标对应的json对象 String username = dataBean.getString("username");//根据json对象中的数据名解析出相应数据
String position = dataBean.getString("position"); System.out.println(username);//打印输出
System.out.println(position);
}
} public static void main(String[] args) {
jieXIJSON();
}
}

其打印输出结果为:

errorCode=0;errorMsg=调用接口成功

[{"position":"student","username":"张文哲"}]

张文哲

student

以上这种解析json对象的方法较为麻烦,代码较多且复杂。可以利用java的反射机制通过把json对象解析成实体类对象的方式来解析json。

首先这里有两个实体类:

package com.json;

import java.util.ArrayList;
import java.util.List; public class RootEntity {
private String errorCode;
private String errorMsg;
private List<UserEntity> data;
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
public String getErrorMsg() {
return errorMsg;
}
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
public List<UserEntity> getData() {
return data;
}
public void setData(List<UserEntity> data) {
this.data = data;
}
}
package com.json;

public class UserEntity {
private String username;
private String position;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
}

解析json字符串的代码:

package com.json;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; public class JsonTest { // 解析json(简单的解析方法,也就是通过json转实体类)
public static void jsonToBean() {
String jsonStr = "{\"errorCode\":\"0\",\"errorMsg\" :\"调用接口成功\",\"data\":[{\"username\":\"张文哲\",\"position\":\"student\"}]}";
RootEntity rootEntity = new JSONObject().parseObject(jsonStr,RootEntity.class);//将json字符串转换成json对象,并通过java的反射机制创建相应的实例 System.out.println(rootEntity.getErrorCode());
System.out.println(rootEntity.getErrorMsg());
System.out.println(rootEntity.getData());
} public static void main(String[] args) {
jsonToBean();
}
}

其运行结果如下:

0

调用接口成功

[com.json.UserEntity@3f78807]

但是使用这种方法解析json字符串时一定要注意:

所对应的类的属性名称和json数据格式中的数据属性名称一定要保持一致(原因:其使用了java反射机制)

如何解析json格式的字符串的更多相关文章

  1. android实现json数据的解析和把数据转换成json格式的字符串

    利用android sdk里面的 JSONObject和JSONArray把集合或者普通数据,转换成json格式的字符串 JSONObject和JSONArray解析json格式的字符串为集合或者一般 ...

  2. 在论坛中出现的比较难的sql问题:36(动态行转列 解析json格式字符串)

    原文:在论坛中出现的比较难的sql问题:36(动态行转列 解析json格式字符串) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.

  3. WP8解析JSON格式(使用DataContractJsonSerializer类)(推荐)

    DataContractJsonSerializer是.NET自带的类,在解析JSON格式的时候使用起来方便快捷,至于生成方面由于暂时没用到就没去看了.使用需要引用System.Runtime.Ser ...

  4. Android 解析JSON格式数据

    比起XML,JSON主要优势在于它的体积更小,在网络上传输的时候可以更省流量.但缺点在于,它的语义性较差,显示不如XML直观. JSON格式 :  { "name_A" : &qu ...

  5. JavaScript中,JSON格式的字符串与JSON格式的对象相互转化

    前言:JSON是一个独立于任何语言的数据格式,因此,严格来说,没有“JSON对象”和“JSON字符串”这个说法(然而”菜鸟教程“和”W3school“使用了“JSON对象”和“JSON字符串”这个说法 ...

  6. 校验字符串是否是JSON格式,将不规则展示的json格式的字符串进行规则展示(json格式化)

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   var str = {"code": "","svcname" ...

  7. Jquery解析Json格式数据

    今天稍微学习了一下Json,JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. JSON采用完全独立于语言的 ...

  8. 如何利用fastjson将JSON格式的字符串转换为Map,再返回至前端成为js对象

    //注意,这里的jsonStr是json格式的字符串,里面如果遇到双引号嵌套双引号的,一般是嵌套的双引号经过转义 //    \",假如有这样的一个场景,这些字符串里面有需要的css样式的j ...

  9. WP8解析JSON格式(使用Newtonsoft.Json包)

    DOTA2 WebAPI请求返回的格式有两种,一种是XML,一种是JSON,默认是返回JSON格式. 这里举一个简单的解析JSON格式的例子(更多JSON操作): { "response&q ...

随机推荐

  1. UVALive 3295

    题目大意:见刘汝佳<算法竞赛入门经典——训练指南>P173 解题思路: 每一个合法的三角形的三个顶点都不在同一直线上,那么问题其实就是在求所有不全在同一直线上的三点的组合数. 我们可以利用 ...

  2. 【Redis】Hash常见应用场景 - 电商购物车

    电商购物车 以用户id为key 商品id为field 商品数量为value 购物车操作 [key(用户id),field(商品id),value(数量)] 添加商品 -> hset cart: ...

  3. ShoneSharp语言(S#)的设计和使用介绍系列(9)— 一等公民“函数“爱炫巧

    ShoneSharp语言(S#)的设计和使用介绍 系列(9)— 一等公民“函数“爱炫巧 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/Shon ...

  4. Java——日期获取和日期格式化

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...

  5. vue滑动位移动画

    需要用到css3,vue过度 在网上找了很久很少的资料,自己摸索了一会看了官方文档,毕竟环境不同,需要的效果不同,耽误了很久 鼠标放上某一个就会从下方弹出层

  6. Java Serializable(序列化)的总结

    1.序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来.虽然你可以用你自己的各种各样的方法来保存object states,但 ...

  7. springboot系列——重试机制原理和应用,还有比这个讲的更好的吗(附完整源码)

    1. 理解重试机制 2. 总结重试机制使用场景 3. spring-retry重试组件 4. 手写一个基于注解的重试组件 5. 重试机制下会出现的问题 6. 模板方法设计模式实现异步重试机制 如果有, ...

  8. tomcat session漏洞反序列化详解

    1. 条件1)攻击者可以控制服务器上的文件名/文件内容2)tomcat context配置了persistencemanager的fileSotre3) persistenceManager 配置了s ...

  9. Oracle数据库表被锁死的处理方法

    (1)锁表查询的代码有以下的形式: select count(*) from v$locked_object; select * from v$locked_object; (2)查看哪个表被锁 se ...

  10. Rocket - config - View

    https://mp.weixin.qq.com/s/b5o3s2DgqOz3-iK8FqPeLQ   介绍配置相关的基础类及其继承关系.   参考链接: https://github.com/fre ...