在 Java 中使用 JSON

2023-04-17 13:52 更新

本教程將會教我們?nèi)绾问褂?Java 編程語言編碼和解碼 JSON。讓我們先來準(zhǔn)備環(huán)境以便針對 JSON 進(jìn)行 Java 編程。

環(huán)境

在我們使用 Java 編碼和解碼 JSON 之前,我們需要安裝一個可用的 JSON 模塊。對于這個教程請下載和安裝 JSON.simple,然后把 jsonsimple-1.1.1.jar 文件的路徑添加到環(huán)境變量 CLASSPATH 中。

JSON 和 Java 實體映射

JSON.simple 實體映射從左側(cè)到右側(cè)為解碼或解析,實體映射從右側(cè)到左側(cè)為編碼。

JSON Java
string java.lang.String
number java.lang.Number
true | false java.lang.Boolean
null null
array java.util.List
object java.util.Map

解碼時,java.util.List 的默認(rèn)具體類是 org.json.simple.JSONArray,java.util.Map 的默認(rèn)具體類是 org.simple.JSONObject。

在 Java 中編碼 JSON

下面這個簡單的示例展示了使用 java.util.HashMap 的子類 JSONObject 編碼一個 JSON 對象。這里并沒有提供順序。如果你需要嚴(yán)格的元素順序,請使用 JSONValue.toJSONString(map) 方法的有序映射實現(xiàn),比如 java.util.LinkedHashMap。

import org.json.simple.JSONObject;

class JsonEncodeDemo 
{
    public static void main(String[] args)
    {
        JSONObject obj = new JSONObject();

        obj.put("name", "foo");
        obj.put("num", new Integer(100));
        obj.put("balance", new Double(1000.21));
        obj.put("is_vip", new Boolean(true));

        System.out.print(obj);
    }
}

編譯和執(zhí)行上面的程序時,會生成如下所示結(jié)果:

{"balance": 1000.21, "num":100, "is_vip":true, "name":"foo"}

下面是另一個示例,使用 Java JSONObject 展示了 JSON 對象流:

import org.json.simple.JSONObject;
class JsonEncodeDemo
{
    public static void main(String[] args)
    {
        JSONObject obj = new JSONObject();

        obj.put("name","foo");
        obj.put("num",new Integer(100));
        obj.put("balance",new Double(1000.21));
        obj.put("is_vip",new Boolean(true));

        StringWriter out = new StringWriter();
        obj.writeJSONString(out);
        String jsonText = out.toString();
        System.out.print(jsonText);
    }
}

編譯和執(zhí)行上面的程序時,會生成如下所示結(jié)果:

{"balance": 1000.21, "num":100, "is_vip":true, "name":"foo"}

在 Java 中解碼 JSON

下面的例子使用了 JSONObjectJSONArray,其中 JSONObject 就是 java.util.Map,JSONArray 就是 java.util.List,因此我們可以使用 Map 或 List 的標(biāo)準(zhǔn)操作訪問它們。

import org.json.simple.JSONObject;
import org.json.simple.JSONArray;
import org.json.simple.parser.ParseException;
import org.json.simple.parser.JSONParser;

class JsonDecodeDemo
{
    public static void main(String[] args)
    {
        JSONParser parser=new JSONParser();
        String s = "[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]";
            try{
            Object obj = parser.parse(s);
            JSONArray array = (JSONArray)obj;
            System.out.println("The 2nd element of array");
            System.out.println(array.get(1));
            System.out.println();
            JSONObject obj2 = (JSONObject)array.get(1);
            System.out.println("Field \"1\"");
            System.out.println(obj2.get("1"));

            s = "{}";
            obj = parser.parse(s);
            System.out.println(obj);

            s= "[5,]";
            obj = parser.parse(s);
            System.out.println(obj);

            s= "[5,,2]";
            obj = parser.parse(s);
            System.out.println(obj);
        }catch(ParseException pe){
            System.out.println("position: " + pe.getPosition());
            System.out.println(pe);
        }
    }
}

編譯和執(zhí)行上面的程序時,會生成如下所示結(jié)果:

The 2nd element of array
{"1":{"2":{"3":{"4":[5,{"6":7}]}}}}

Field "1"
{"2":{"3":{"4":[5,{"6":7}]}}}
{}
[5]
[5,2]


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號