JS,PHP,Python,Java对JSON数据的处理
现在只要编写接口,接口调用,大家都绕不过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中的转化与解析
- Java中的转化与解析 Java中有很多处理JSON格式数据的包,如fastjson,gjson,jackjson,以下列子采用fastjson 实现。
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
- TensorFlow修炼之道(3)——计算图和会话(Graph&Session)
- 1.python简介
- 《Python自然语言处理》答案第三章
- 2.python数据类型
- Miller Rabin算法详解
- 3.python文件操作
- TensorFlow修炼之道(2)——变量(Variable)
- 4.python迭代器生成器装饰器
- 洛谷P2044 [NOI2012]随机数生成器
- 5.python函数
- TensorFlow 修炼之道(1)——张量(Tensor)
- 6.python内置函数
- 附加文件时候的提示“无法重新生成日志,原因是数据库关闭时存在打开的事务/用户,该数据库没有检查点或者该数据库是只读的 ”
- 7.python常用模块
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Mysql必知必会!
- 【一天一大 lee】路径总和 II (难度:中等) - Day20200926
- 【一天一大 lee】从中序与后序遍历序列构造二叉树 (难度:中等)-Day20200925
- 【一天一大 lee】填充每个节点的下一个右侧节点指针 II (难度:中等) - Day20200928
- 【一天一大 lee】 二叉搜索树中的众数 (难度:简单)-Day20200924
- 【一天一大 lee】 合并二叉树 (难度:简单)-Day20200923
- 表达量矩阵分组很复杂也可以使用limma的3大策略
- 一日一技:loguru 如何把不同的日志写入不同的文件中
- 如何迁移SSDB数据到Tendis解决方案
- 第40期:Keep Balance,平衡二叉树!
- 第38期:BST 的搜索(小白必看)
- 第39期:小白一看就会的 BST 删除!
- 基于OpenCV的区域分割、轮廓检测和阈值处理
- 基于OpenCV的实用图像处理操作
- LDAP 中 DN CN DC OU