浅谈json

一、什么是JSON

JSON:JavaScript 对象表示法(JavaScript Object Notation)

a、JSON 是轻量级的文本数据交换格式

b、JSON 具有自我描述性,更易理解

c、JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台

d、JSON 解析器和 JSON 库支持许多不同的编程语言。

  • 相比XML优点

没有结束标签

更短

读写的速度更快

能够使用内建的 JavaScript eval() 方法进行解析

使用数组

不使用保留字

二、语法规则

数据在名称/值对中

数据由逗号分隔

花括号保存对象

方括号保存数组

  • JSON 名称/值对

JSON 数据的书写格式是:名称/值对

名称/值也可以叫键/值或key/value

"firstName" : "John"
等同于js
firstName = "John"
  • JSON 值

数字(整数或浮点数)

字符串(在双引号中)

逻辑值(true 或 false)

数组(在方括号中)

对象(在花括号中)

null

  • JSON 对象

JSON 对象在花括号中书写,对象可以包含多个名称/值对

{ "firstName":"John" , "lastName":"Doe" }
等同于js
firstName = "John"
lastName = "Doe"
  • JSON 数组

JSON 数组在方括号中书写,可以用数组包含多个对象,

{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
  • 数组与对象的关系

a、一个对象可以包含多个名称/值对,用","隔开

b、一个对象也可以包含多个JSON 数组,用","隔开

c、名称/值对与数组之间用","隔开

d、一个对象中也可以包含另一个对象

{
"key": [{ "key":"value" , "key":"value" },{ "key":"value" , "key":"value" }],//数组
"key":"value" ,//数据
"key":"value" ,//数据
"key": [{ "key":"value" , "key":"value" }],//数组
"key":{"key","value"}//对象
}

三、JSON与JavaScript 

因为 JSON 使用 JavaScript 语法,所以 在JavaScript 中的可以直接使用 JSON。

  • json对象

 

  • json数组

定义

var employees = [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName": "Carter" }
];

访问

employees[0].lastName;

修改

employees[0].lastName = "Jobs";

添加

employees[0]["name"] = "Jobs";
employees[0].name = "Jobs";

添加数组 

employees.push(json)

 删除

delete employees[0].firstname

删除数组 

employees.splice(1)

转换为字符串

在linux下出现过不可使用的问题 

var str = JSON.stringify(json);

 

  • json文本

定义

var txt = '{ "employees" : [' +
'{ "firstName":"Bill" , "lastName":"Gates" },' +
'{ "firstName":"George" , "lastName":"Bush" },' +
'{ "firstName":"Thomas" , "lastName":"Carter" } ]}';
var financestateMean = [{
	id : 0,
	text : "0-未融资"
}, {
	id : 1,
	text : '1-已融资'
}];
meanArr = [{
	field : "financestate",
	mean : financestateMean
}];

解析

//eval() 函数可编译并执行任何 JavaScript 代码
var obj = eval ("(" + txt + ")");
//JSON 解析器只能识别 JSON 文本,而不会编译脚本
var obj = JSON.parse(txt);

使用

<p>
First Name: <span id="fname"></span><br />
Last Name: <span id="lname"></span><br />
</p>

<script type="text/javascript">
document.getElementById("fname").innerHTML = obj.employees[1].firstName
document.getElementById("lname").innerHTML = obj.employees[1].lastName
</script>

 

四、FastJson

a、fastjson 是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串

b、支持将 Java Bean 序列化为 JSON 字符串

c、也可以从 JSON 字符串反序列化到 JavaBean。

fastjson.jar包原始下载地址:https://github.com/alibaba/fastjson

点击页面中的download即可下载最新的包

fastjson.jar包百度云盘下载地址:https://pan.baidu.com/s/1CCGoRCdSjNUDB736cRCDBw

  • 继承关系

主要的3个类:JSON,JSONArray,JSONObject

a、JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。
b、JSONObject:fastJson提供的json对象。
c、JSONArray:fastJson提供json数组对象。

  • toJSONString

 JAVA对象或JSON数组转JSON字符串

String s = JSONObject.toJSONString(对象/数组)
String s = JSON对象.toJSONString()
String s = JSON数组.toJSONString()
  • parseObject

JSON字符串转JSON对象

JSONObject jsonObject = JSON.parseObject(字符串)
  • getString

从对象中,根据key取出value

 String value= jsonObject.getString("key");
  • getJSONArray

从对象中,根据key取出数组

JSONArray arr= jsonObject.getJSONArray("key")
  • getJSONObject

从对象中取出另一个对象

 JSONObject data = jsonObject.getJSONObject("key");

从数组中取出另一个对象 

for(int i=0;i<jsonArray.size();i++){
			JSONObject jsonVo = (JSONObject)jsonArray.get(i);
		}

 

  • JSON->JAVA

JSON字符串转JAVA简单对象

类 对象= JSON.parseObject(字符串,类.class);

JSON对象转JAVA对象

 类 对象 = JSONObject.toJavaObject(json,类.class)
  • JSON->list

JSON数组字符串转list

	java.util.List<类> list = JSONArray.parseArray(jsonArrayString,类.class);
String respStr = "{    'ResultData': [        {            'businessId': '987765',            'id': '387',            'remark': '1',            'time': '20190903',            'type': '2'        },        {            'businessId': '987764',            'id': '387',            'remark': '',            'time': '20190903',            'type': '1'        }    ],    'ResultHeader': {        'message': '调用成功!',        'type': '0'    }}";
		JSONObject json = JSONObject.parseObject(respStr);
		 String resultHeader = json.getString("ResultData");
		java.util.List<SyzcdRzsqxxbVO> list = JSONArray.parseArray(resultHeader,SyzcdRzsqxxbVO.class);
  • 总结

a、将字符串转换为json对象或java对象的方法都以parse开头

b、将json对象转换为java对象的方法都以to开头

五、举个栗子

demo

{
    'ResultData': [
        {
            'businessId': '987765',
            'id': '387',
            'remark': '',
            'time': '20190903',
            'type': '2'
        },
        {
            'businessId': '987764',
            'id': '387',
            'remark': '',
            'time': '20190903',
            'type': '1'
        }
    ],
    'ResultHeader': {
        'message': '调用成功!',
        'type': '0'
    }
}

 

public class JsonTest {
	@Test
	public void message() {
		String respStr = "{    'ResultData': [        {            'businessId': '987765',            'id': '387',            'remark': '1',            'time': '20190903',            'type': '2'        },        {            'businessId': '987764',            'id': '387',            'remark': '2',            'time': '20190903',            'type': '1'        }    ],    'ResultHeader': {        'message': '调用成功!',        'type': '0'    }}";
		JSONObject json = JSONObject.parseObject(respStr);
		 JSONArray resultHeader = json.getJSONArray("ResultData");
		for(int i=0;i<resultHeader.size();i++){
			JSONObject jsonVo = (JSONObject)resultHeader.get(i);
			SyzcdRzsqxxbVO vo = JSONObject.toJavaObject(jsonVo, SyzcdRzsqxxbVO.class);
			vo.setMsgtype(jsonVo.getString("type"));
			System.out.println(vo);
		}
	}
}

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值