现在只要编写接口,接口调用,大家都绕不过JSON,各种编程语言里面都有对JSON数据的处理,今天用代码对比下JS,PHP,Python,Java对JSON数据的处理。
目录
1.JSON格式是啥
2.JavaScript中的转化与解析
3.Java中的转化与解析
4.Python中的转化与解析
5.PHP中 的转化与解析
1
JSON格式是啥
JSON: JavaScript Object Notation(JavaScript 对象表示法)。
可以看到JSON 是来自JavaScript,它是存储和交换文本信息的一种方式,大家经常看到*.json 文件,API 接口的返回格式很多都是JSON格式。
JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。目前非常多的动态(PHP,Python,Java,.NET)编程语言都支持JSON。
JSON 的格式如下:
1.数据在名称/值对中
2.数据由逗号分隔
3.大括号保存对象
4.中括号保存数组
5.字符串值要用双引号
例如:
{
code: 200, #数据在名称/值对中,数据由逗号分隔,大括号保存对象
data: [ #中括号保存数组,列表
{
desc: "vita茶 商品描述",
id: 2,
name: "vita茶",
price: 200,
stock: 20
},
{
desc: "可口可乐 商品描述",
id: 3,
name: "可口可乐",
price: 20,
stock: 200
}
],
message: "请求成功" #字符串值要用双引号
}
以上这个格式 80%的JSON 格式都包含了,再复杂的无非就是以此为基础嵌套。接下来以此为例,将使用JavaScript,Java,Python,PHP分别实现JSON数据的输出与解析。
2
JavaScript中的转化与解析
JavaScript 中可将JSON字符串直接解析为JavaScript的对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
var goods1 = {
desc: "vita茶 商品描述",
id: 2,
name: "vita茶",
price: 200,
stock: 20
};
var goods2 = {
desc: "可口可乐 商品描述",
id: 3,
name: "可口可乐",
price: 20,
stock: 200
};
var result = {
code: 200,
message: "请求成功",
data: [
goods1,
goods2,
]
}
// 将result 对象转化为 json字符串
var str = JSON.stringify(result)
console.log(typeof (str))
console.log(str)
console.log('------')
// JavaScript 将json字符串解析后就会变为JavaScript对象
var res = JSON.parse(str);
console.log(typeof(res) )
console.log(res);
</script>
</body>
</html>
运行结果:
3
Java中的转化与解析
Goods goods = new Goods();
goods.setId(id);
goods.setDesc("vita茶 商品描述");
goods.setName("vita茶");
goods.setPrice(200);
goods.setStock(20);
Goods goods2 = new Goods();
goods2.setId(3);
goods2.setDesc("可口可乐 商品描述");
goods2.setName("可口可乐");
goods2.setPrice(20);
goods2.setStock(200);
List<Goods> goodsList = Lists.newArrayList();
goodsList.add(goods);
goodsList.add(goods2);
Map<String, Object> aMap = Maps.newHashMap();
aMap.put("code", 200);
aMap.put("message", "请求成功");
aMap.put("data", goodsList);
String s = JSON.toJSONString(aMap);
//解析 json 字符串为 对象,定义 VO层对象 Result
Result res = JSON.parseObject(s, Result.class);
String message = res.getMessage();
int code = res.getCode();
List<Goods> goodsList1 = res.getData();
其中:Goods 为JavaBean。
package com.qustdjx.product.vo;
import lombok.Data;
@Data
public class Goods {
private int id;
private String name;
private int price;
private int stock;
private String desc;
}
Result 为JavaBean
package com.qustdjx.product.vo;
import lombok.Data;
import java.util.List;
@Data
public class Result {
private int code;
private String Message;
private List<Goods> data;
}
4
Python中的转化与解析
Python中喜欢用dict 表示JSON的对象,导入json包,
方法json.dumps 将字典转化为json字符串
方法 json.loads 将json字符串转化为对象
import json
goods1 = {
'desc': "vita茶 商品描述",
'id': 2,
'name': "vita茶",
'price': 200,
'stock': 20
}
goods2 = {
'desc': "可口可乐 商品描述",
'id': 3,
'name': "可口可乐",
'price': 20,
'stock': 200
}
response = {
'code': 200,
'message': "请求成功",
'data': [
goods1,
goods2
]
}
## 将字典类型 response 转化为 json字符串
str_res = json.dumps(response)
print(str_res)
print('--------')
## 将字符串解析为python 对象
content = json.loads(str_res)
print(content)
5
PHP中的转化与解析
PHP 中使用关联数组来表示 JSON中的对象,
方法 json_encode将数组转化为JSON字符串
方法 json_decode将JSON字符转化为串数组或对象,第二参数为false则为对象,为true则为关联数组。
<?php
$goods1 = array(
'desc'=> "vita茶 商品描述",
'id'=> 2,
'name'=> "vita茶",
'price'=> 200,
'stock'=> 20
);
$goods2 = array(
'desc'=> "可口可乐 商品描述",
'id'=> 3,
'name'=> "可口可乐",
'price'=> 20,
'stock'=> 200
);
$response = array(
'code'=> 200,
'message'=> "请求成功",
'data'=> [
$goods1,
$goods2
]
);
// 使用json
$str = json_encode($response,JSON_UNESCAPED_UNICODE);
echo $str;
echo '----';
$res= json_decode($str,true);
var_dump($res);
运行结果:
总结
Java 作为编译语言,要注意变量的类型。
而JavaScript,Python,PHP 作为脚本语言,不需要注意变量类型。
还有很多编程语言都可以对JSON处理,遵循一定规范都是可以对接的。
为啥我感觉没有强制变量类型的编程语言,写起来怎么那么舒服???
真香??
END