JSON简介

简介: JSON简介

1.什么是json

JSON:(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。目前,Json处于数据交换语言的王者地位.

1.1 json的特点

(1)json是一种轻量级的数据交换格式

(2)json采用完全独立于计算机语言和操作系统的平台,不同的编程语言和操作系统json数据是一致的

(3)json易于阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输效率)

1.2 xml和json的区别

(1)xml:

1.json与js对象的转换

<script type="text/javascript">
        // js对象
        var obj = { name: "亚瑟", age: 23, address: "上海" };
        document.write(obj.name + "<br/>");
        var obj2 = {
            users: [{ name: "鲁班", age: 21, address: "北京" },
            { name: "后裔", age: 26, address: "广州" }]
        };
        document.write(obj2.users[0].address + "<br/>");
        // json转换为js对象(方式一)
        var test1 = '{"name":"后裔","age":25}';
        var obj3 = eval("(" + test1 + ")"); //必须带圆括号
        document.write("name=" + obj3.name + ",age=" + obj3.age + "<br/>");
        // json转换为js对象(方式二)
        var obj4 = JSON.parse('{ "name":"李白", "age":18, "address":"北京" }');
        document.write(obj4.name + "<br/>");
    </script>

注意:

(1)有些浏览器不支持JSON.parse这个方法,可以到官网下载json2.js添加到你的hlml中就可以了。

(2)为什么要 eval这里要添加 eval(“(” + test1 + “)”)//”呢?

原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性

的将它转换成一种表达式。

加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将 括号内的表达式(expression)转化为对象,而不是作为语(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始

和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:

alert(eval(“{}”); // return undefined

alert(eval(“({})”);// return object[Object]

2.Json与Java对象的转换

(1)使用 alibaba 的 fastJson

<!--json-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.28</version>
        </dependency>

(2)实例

public class MyJson {
    public static String jsonmap = "{\"001\":{\"name\":\"xiaohong\",\"password\":\"654321\"},\"002\":[{\"$ref\":\"$.001\"},{\"name\":\"xixi\",\"password\":\"789\"}]}";
    public static String jsonuser = "{\"name\":\"xiaohong\",\"password\":\"654321\"}";
    public static String jsonlist = "[{\"name\":\"xiaohong\",\"password\":\"654321\"},{\"name\":\"xixi\",\"password\":\"789\"}]";
 
    public static void main(String[] args) {
        User user = new User();
        user.setName("xiaohong");
        user.setPassword("654321");
        List<User> list = new ArrayList<User>();
        list.add(user);
        list.add(new User("xixi","789"));
        Map map = new HashMap();
        map.put("001",user);
        map.put("002",list);
        // 1. json字符串 转换为 java 对象
 
        // toJsonString  - java对象转换为json字符串
        System.out.println(JSONObject.toJSONString(user));
        System.out.println(JSONObject.toJSONString(list));
        System.out.println(JSONObject.toJSONString(map));
 
        // toJavaObject - json字符串转换为java对象
        System.out.println(JSONObject.parseObject(jsonuser,User.class));
        List list1 = JSONObject.parseObject(jsonlist, List.class);
        for(int i=0;i<list1.size();i++) {
            System.out.println(JSONObject.parseObject(JSONObject.toJSONString(list1.get(i)),User.class));
        }
        Map map1 = JSONObject.parseObject(jsonmap, Map.class);
        Iterator iterator = map1.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry entry= (Map.Entry) iterator.next();
            System.out.println("key :"+entry.getKey()+"   value: " + entry.getValue());
        }
 
        // Json  -- 实体类转换为json字符串
        System.out.println(JSON.toJSONString(user));
        System.out.println(JSON.toJSONString(list));
        System.out.println(JSON.toJSONString(map));
 
        // json  -- json 转 java对象
        System.out.println(JSON.parseObject(jsonuser,User.class));
        List list2 = JSON.parseObject(jsonlist, List.class);
        for(int i=0;i<list2.size();i++) {
            System.out.println(JSON.parseObject(JSON.toJSONString(list1.get(i)),User.class));
        }
        Map map2 = JSON.parseObject(jsonmap, Map.class);
        Iterator iterator2 = map1.entrySet().iterator();
        while (iterator2.hasNext()) {
            Map.Entry entry= (Map.Entry) iterator2.next();
            System.out.println("key :"+entry.getKey()+"   value: " + entry.getValue());
        } } }

3.使用Java修改json字符串(JSON解析库使用Jackson)

(1)替换json字符串,指定的值

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class Main {
    public static void main(String[] args) {
        String jsonStr = "{\"code\":0,\"msg\":\"\",\"count\":3042,\"data\":[{\"UPN\":\"WR1.04.046.0166300023032100120230316104\",\"PN\":\"1.04.046.0166\",\"Lot\":null,\"DC\":\"20230316\",\"Qty\":3000,\"PositionCode\":\"1-1-27-1\",\"CreateTime\":\"2023-10-23 08:49:00\"},{\"UPN\":\"WR1.04.046.0166300023032100120230316512\",\"PN\":\"1.04.046.0166\",\"Lot\":null,\"DC\":\"20230316\",\"Qty\":3000,\"PositionCode\":\"1-1-27-2\",\"CreateTime\":\"2023-10-23 08:49:12\"},{\"UPN\":\"WR1.04.046.0166300023032100120230316434\",\"PN\":\"1.04.046.0166\",\"Lot\":null,\"DC\":\"20230316\",\"Qty\":3000,\"PositionCode\":\"1-1-27-3\",\"CreateTime\":\"2023-10-23 08:49:24\"},{\"UPN\":\"WR1.04.046.0166300023032100120230316999\",\"PN\":\"1.04.046.0166\",\"Lot\":null,\"DC\":\"20230316\",\"Qty\":3000,\"PositionCode\":\"1-1-27-5\",\"CreateTime\":\"2023-10-23 09:05:02\"},{\"UPN\":\"WR1.04.042.0074273022120800120221205927\",\"PN\":\"1.04.042.0074\",\"Lot\":null,\"DC\":\"20221205\",\"Qty\":2730,\"PositionCode\":\"1-1-1-3\",\"CreateTime\":\"2023-10-25 12:51:21\"}]}";
        JSONObject jsonObject = JSONObject.parseObject(jsonStr);
        jsonObject.put("msg", "替换后的值");
        System.out.println(jsonObject.toJSONString());
    }
}

(2)替换json字符串的key的值

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class Main {
    public static void main(String[] args) {
        String jsonStr = "{\"code\":0,\"msg\":\"\",\"count\":3042,\"data\":[{\"UPN\":\"WR1.04.046.0166300023032100120230316104\",\"PN\":\"1.04.046.0166\",\"Lot\":null,\"DC\":\"20230316\",\"Qty\":3000,\"PositionCode\":\"1-1-27-1\",\"CreateTime\":\"2023-10-23 08:49:00\"},{\"UPN\":\"WR1.04.046.0166300023032100120230316512\",\"PN\":\"1.04.046.0166\",\"Lot\":null,\"DC\":\"20230316\",\"Qty\":3000,\"PositionCode\":\"1-1-27-2\",\"CreateTime\":\"2023-10-23 08:49:12\"},{\"UPN\":\"WR1.04.046.0166300023032100120230316434\",\"PN\":\"1.04.046.0166\",\"Lot\":null,\"DC\":\"20230316\",\"Qty\":3000,\"PositionCode\":\"1-1-27-3\",\"CreateTime\":\"2023-10-23 08:49:24\"},{\"UPN\":\"WR1.04.046.0166300023032100120230316999\",\"PN\":\"1.04.046.0166\",\"Lot\":null,\"DC\":\"20230316\",\"Qty\":3000,\"PositionCode\":\"1-1-27-5\",\"CreateTime\":\"2023-10-23 09:05:02\"},{\"UPN\":\"WR1.04.042.0074273022120800120221205927\",\"PN\":\"1.04.042.0074\",\"Lot\":null,\"DC\":\"20221205\",\"Qty\":2730,\"PositionCode\":\"1-1-1-3\",\"CreateTime\":\"2023-10-25 12:51:21\"}]}";
        JSONObject jsonObject = JSONObject.parseObject(jsonStr);
        int count = jsonObject.getIntValue("count");
        jsonObject.put("total", count);
        jsonObject.remove("count");
        System.out.println(jsonObject.toJSONString());
    }
}
目录
相关文章
|
6月前
|
JSON JavaScript 前端开发
小白一眼就能懂的JSON简介与基本使用指南
小白一眼就能懂的JSON简介与基本使用指南
|
6月前
|
编解码 JavaScript 前端开发
TypeScript【第三方声明文件、自定义声明文件、tsconfig.json文件简介、tsconfig.json 文件结构与配置】(六)-全面详解(学习总结---从入门到深化)
TypeScript【第三方声明文件、自定义声明文件、tsconfig.json文件简介、tsconfig.json 文件结构与配置】(六)-全面详解(学习总结---从入门到深化)
321 0
|
3月前
|
XML JSON 前端开发
JSON简介
JSON简介
47 1
|
6月前
package.json和package-lock.json简介
package.json和package-lock.json简介
|
11月前
|
存储 JSON JavaScript
JSON简介
JSON简介
115 0
|
JSON JavaScript 前端开发
C++ Json工具--Jsoncpp用法简介
Json简介 JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式,可读性强,易扩展,很适合做通信协议,下面主要介绍一款C++的Json库:Jsoncpp.
889 0
|
XML JSON 测试技术
soapUI 使用soapUI测试http+json协议接口简介2
soapUI 使用soapUI测试http+json协议接口简介2
214 0
|
测试技术 网络架构 Windows
soapUI 使用soapUI测试http+json协议接口简介 1
soapUI 使用soapUI测试http+json协议接口简介
150 0
|
XML JSON JavaScript
JSON格式简介
JSON格式简介
191 0
JSON格式简介
|
XML JSON 前端开发