zoukankan      html  css  js  c++  java
  • JSON基础(Java)

    1.json maven 依赖(以下都以第一个包为例)

     <dependency>

      <groupId>org.json</groupId>
      <artifactId>json</artifactId>
      <version>20160212</version>
    </dependency>

     (

    <dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
    <classifier>jdk15</classifier>
    </dependency>

    )

    2.表示法:

    (1)JSON String 表示法,

    用转义字符表示:

    String aa = "{"1":"小红","2":"小王","3":"小明","4":"小张"}";

    用单引号代替双引号:

    String aa = "{'name':'zack','age':'20'}";

    (2)org.json jar 下的 JSONObject 和 JSONArray

     

         JSONObject jsonObject = new JSONObject();
            jsonObject.put("1", "Rose");
            jsonObject.put("2", "JACK");
            jsonObject.put("3", "Mike");
            jsonObject.put("4", "Joe");
            System.out.println(jsonObject);
            
            JSONArray jsonArray = new JSONArray();
            jsonArray.put(1, "wwww");
            jsonArray.put(6, "aa");
            System.out.println(jsonArray);

     JSONObject

    • json对象在花括号中书写;
    • 对象包含多个名称/值对;

    {"firstname":"John","lastname":"Doe"}

    JSONArray

    • json数组在方括号中书写
    • 数组可包含多个对象
    {
        "employees":[
        {"firstname":"alex","lastname":"andy"},
        {"firstname":"zack","lastname":"herry"}
        ]
    }

    JSON数组和JSON对象的区别

    JSON数组:
    {
        "cat":"it",
        "language":[
            {"id":1,"ide":"eclipse","name":Java},
            {"id":2,"ide":"XCode","name":"Swift"},
            {"id":3,"ide":"Visual Stdio","name":"C#"}     
        ],
        "pop":true
    }
    
    JOSN对象:
    {
        "name": "Tim",
        "info": {
            "score": {
                "english": "A",
                "math": "B"
            },
            "age": 20
        }
    }

    (3)JSON的表示法

      第一种

    • 以(key/value)对的形式存在的无序的jsonObject对象。一个对象以“{”开始,以“}”结束。每个“名称”后跟一个“:”;“名称/值”对之间使用“,”分割。
    • 对于这种数据格式,key值必须要是String类型,而对于value,可以是String、number、object、array、boolean、null等数据类型
    {
        "name":"zack",
        "age":20
    }

    第二种

    有序的value集合,这种形式被称为jsonArray,数组是值(value)的有序集合。一个数组以“[”开始,以“]”结束,值之间使用“,”分隔。

    {
        "student":
        [
        {"name":"zack","age":20},
        {"name":"jack","age":25}
        ]
    }

    3.map转换为JSON

    方法一:

    Map<String, String> map = new HashMap<>();
    map.put("1", "小红");
    map.put("2", "小王");
    map.put("3", "小明");
    map.put("4", "小张");
    map.put("5", "小赵");
    ObjectMapper json = new ObjectMapper();

    try {
    String string = json.writeValueAsString(map);
    JSONObject jsonObject = new JSONObject(string);

    } catch (JsonProcessingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    方法2:

    用maven引入fastjson jar包

    <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.24</version>
    </dependency>
            Map<String, String> map = new HashMap<>();
            map.put("1", "小红");
            map.put("2", "小王");
            map.put("3", "小明");
            map.put("4", "小张");
            map.put("5", "小赵");
            String aString = JSON.toJSONString(map);
            System.out.println(aString);

    4.JSON的解析

    (1)第一个jar 包解析法:

    String str = "{"1":"小红","2":"小王","3":"小明","4":"小张"}";

    JSONObject jsonObject = new JSONObject(str);

    System.out.println(jsonObject.getString("1"));
    System.out.println(jsonObject.getString("2"));

    System.out.println(jsonObject.getString("3"));

    多层JSON嵌套JSONObject :

    String jsonData="{"name":"lily","age":23,"addr":{"city":guangzhou,"province":guangdong}}";
    JSONObject jsonObject1 =new JSONObject(jsonData);
    JSONObject jsonObject2 = jsonObject1.getJSONObject("addr");
    System.out.println(jsonObject2.getString("city"));

    JSONArray 嵌套 JSONObject 

            String jsonString = "{'student':[{'name':'zack','age':20},{'name':'jack','age':25}]}";
            JSONObject jsonObject = new JSONObject(jsonString);
    
            JSONArray jsonArray = jsonObject.getJSONArray("student");
            System.out.println(jsonArray);
            for(int i=0;i<jsonArray.length();i++){
                JSONObject jObject = jsonArray.getJSONObject(i);
                System.out.println(jObject.getString("name"));
            }

    在不知道key值的情况下可以如下解析:

         String aa = "{'name':'zack','age':'20'}";
            JSONObject jsonObject = new JSONObject(aa);
    
            Iterator<?> iterator = jsonObject.keys();
            String key = null;
    
            while (iterator.hasNext()) {
                key = (String) iterator.next();
                System.out.println(key);
                System.out.println(jsonObject.getString(key));
            }

    (2)第二个jar包解析法(需要用[ ]把字符串包起来)

    String aa = "[{"1":"小红","2":"小王","3":"小明","4":"小张"}]";

    JSONArray jsonArray = JSONArray.fromObject(aa);
    if (jsonArray.size() > 0) {
    // 遍历 jsonarray 数组,把每一个对象转成 json 对象
    for (int i = 0; i < jsonArray.size(); i++) {
    JSONObject jsonObject = jsonArray.getJSONObject(i);
    System.out.println(jsonObject.get("1"));
    System.out.println(jsonObject.get("2"));
    System.out.println(jsonObject.get("3"));
    }
    }

    5.JSON 转换为替他格式

    (1)to String

    String str = jsonObject.toString();

     6.JSONTokener

    • JSONTokener读取包含json格式数据的文件,然后可以将JSONTokener对象作为参数来构造JSONObject或JSONArray,然后再进行相应的解析。

    JSONTokener jsonTokener = new JSONTokener(jsonStr);

    JSONObject jsonObject = new JSONObject(jsonTokener);

  • 相关阅读:
    OCP-1Z0-053-V12.02-285题
    OCP-1Z0-053-V12.02-281题
    今天博客抽风了,我也抽风了
    OCP-1Z0-053-V12.02-278题
    OCP-1Z0-053-V12.02-271题
    OCP-1Z0-053-V12.02-269题
    OCP-1Z0-053-V12.02-256题
    OCP-1Z0-053-V12.02-249题
    OCP-1Z0-053-V12.02-248题
    OCP-1Z0-053-V12.02-244题
  • 原文地址:https://www.cnblogs.com/lukelook/p/8391371.html
Copyright © 2011-2022 走看看