JSON相关

1、JSON介绍

        JSON:JavaScript Object Notation,即JavaScript对象标记法,是一种轻量级的数据交换格式,独立于语言,可以被任何编程语言作为数据来读取和使用。

        JSON的值可以有以下几种类型:

                - 数字(整型或浮点型)

                - 字符串(必须用双引号引起来)

                - 布尔值(true或false)

                - 数字(用方括号表示)

                - 对象(用花括号表示)

                - null

        JSON有两种结构形式:对象和数组。

                对象结构是用{}表示,中间包含0或多个key:value对,数据通过obj["key"]或obj.key的方式来获取;

                数组则是用[]表示,中间由0或多个值列表组成,其数据是有序的,因此,可通过obj[index]来获取数据。

// 1.对象结构
var obj = {
    "id":44021,
    "name":"知乎",
    "appPackage":"com.zhihu.android",
    "size":23720,
    "versionCode":442
};
console.log(obj.name);//知乎
console.log(obj["name"]);//知乎

// 2.数组结构
var obj = [
    200,
    "success",
    {
        "subCode":1,
        "errorMsg":null
    }
];
console.log(obj[0]);//200
console.log(obj[2].subCode);//1

2、应用场景

        (1)接口返回数据

                - 前后端分离系统中,后端传给前端的数据

                - Ajax异步访问数据

                - 开放API接口,如百度翻译、天气查询等

                - 企业间合作的接口

                ......等等

        (2)序列化

                序列化:将对象转化为可传输的字节序列;

                反序列化:将字节序列还原为对象的过程

                序列化的最终目的是为了实现跨平台存储和进行网络传输,而我们进行跨平台存储和网络传输的方式就是IO,IO支持的数据是字节数组。

                JSON是常见的序列化方式之一。对象进行序列化时,会保存class信息下来,但是不同语言的数据类型不一样,有可能无法将序列化后的数据还原为原来的样子。但JSON对象序列化时只保存对象的属性数据,不会保存class信息,可以实现跨语言读写数据。

                另:我们用的一些json解析的库,如java的fastjson和python的json库,已经帮我们实现了序列化和反序列化,不用我们显式地去写代码。

        (3)生成Token

        (4)配置文件

                典例是npm的包管理配置文件package.json

3、JSON数据的操作

        3.1 JavaScript

                (1)eval()

                        该函数接收一个字符串参数,并将它作为脚本代码来执行。比如:eval("{name:'张三'}"),{}被解析为代码块,表示声明一个对象。因而,使用该函数将json串转换为对象,有两种方式:

                        第一种:在json字符串前面拼接"var obj = ";

                        第二种:在json字符串前后使用()括起来,这样eval就不会将{}解析为代码块,而是表达式了。

// 第一种方式
var str = '{"id":"44021","name","知乎"}';
eval('var obj = ' + str);
console.log(obj["name"]);//知乎

// 第二种方式
var str = '{"id":"44021","name","知乎"}';
var obj = eval("(" + str + ")");
console.log(obj["name"]);//知乎

                (2)JSON.parse()

                        该函数接收json格式字符串,将其转换为JavaScript对象。

                        特殊用法:该函数还有个参数reviver,它是一个函数,可以在里面定义一些操作,对json的值做处理后再返回。

var str = '{"id":"44021","name","知乎"}';
var obj = JSON.parse(str);
console.log(obj["name"]);//知乎


var str = '[{"id":"44021","name","知乎"},{"id":"40019","name","淘宝"},{"id":"45001","name","大众点评"}]';
var obj = JSON.parse(str);
console.log(obj[1].name);//淘宝


// 特殊用法
var text = '{"name":"肖战","birth":"1991-10-05","city":"重庆"}';
var obj = JSON.parse(text,function(key,value){
    // 将日期字符串转为日期对象
	if (key == "birth"){
		return new Date(value);
	}else{
		return value;
	}
});

                (3)JSON.stringify()

                        该函数把JavaScript对象转为json字符串:给key参数加上双引号,value不变。

var obj = {
	name:"王一博",
	age:24,
	city:"洛阳"
};
var jsonStr = JSON.stringify(obj);
console.log(jsonStr[1]);//"

        3.2 Java

                fastjson主要有三个类:JSON、JSONObject、JSONArray。

                其中,JSON是其他两个类的父类,主要用于进行json字符串与对象的转化,包括字符串与JavaBean、JSONObject、JSONArray之间的互相转化;而JSONObject和JSONArray则用于解析json字符串、获取数据。

                (1)JSON

// json字符串转为javabean
String str = "{\"format\":\"png\",\"leval\":1,\"title\":\"json字符串转为javabean\"}";
Material m = JSON.parseObject(str,Material.class);



// json字符串转为list
String str = "[{\"format\":\"png\",\"leval\":1,\"title\":\"第一个对象\"},{\"format\":\"jpg\",\"leval\":2,\"title\":\"第二个对象\"},{\"format\":\"gif\",\"leval\":3,\"title\":\"第三个对象\"}]";
List<Material> materials = JSON.parseArray(str,Material.class);
for (Material m : materials)
{
    System.out.println(m.toString);
}



// jsonobject转为javabean
// jaonarray转为list
JSONArray mUrls = item.getJSONArray("mUrls");
for (int i = 0; i < mUrls.size(); i++)
{
    MUrl url = JSON.toJavaObject(mUrls.getJSONObject(i),MUrl.class);
    list.add(url);
}



// map转为json字符串
ArrayList<Material> list = new ArrayList<>();
list.add(material);
list.add(material2);
list.add(material3);
HashMap<String,Object> map = new HashMap<>();
map.put("leval",1);
map.put("title","map转为json字符串");
map.put("list",list);
map.put("format","png");
System.out.println(JSON.toJSONString(map));

                (2)JSONObject

                        getxxx(key):获取key对应的值,并将其转为某一类型,如getInteger()、getString、getJSONArray()等。

String msg = (String)jsonObject.get("msg");
Integer code = jsonObject.getInteger("code");
JsonArray objects = jsonObject.getJSONArray("objects");

                (3)JSONArray

                        与JSONObject相似,获取数据也是通过getxxx(index)方式,只不过参数是索引index。

                        另外,因为JSONArray代表的是json对象数组,类中还提供了直接操作json对象的方法,如add()、remove()等。

        3.3 Python

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值