首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Simple JSON (json-simple) 開發指南:解析、生成、流式處理與容器工廠

     編輯:Java 相關知識

簡介

Simple JSON(json-simple)是 Google 開源的輕量級 Java JSON 庫,遵循 Apache 2.0 協議。核心特點:

  • JSONObject 實現 Map,JSONArray 實現 List,無縫對接集合框架。
  • 提供 JSONValue 便捷靜態方法與 JSONParser 高性能解析器。
  • 支持 SAX 風格的流式事件驅動解析,適合大文件處理。

核心類速查

類用途
JSONValue靜態工具類:parse()、toJSONString()
JSONParser可配置解析器,支持容器工廠、異常位置定位
JSONObject有序 Map 實現,保持鍵插入順序
JSONArrayList 實現,支持隨機訪問
ContentHandlerSAX 事件接口,實現流式處理

常用場景代碼示例

1. 便捷解析與遍歷(JSONValue)

String json = "[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]";
Object obj = JSONValue.parse(json);
JSONArray array = (JSONArray) obj;
System.out.println(array.get(1)); // 取第二個元素
JSONObject obj2 = (JSONObject) array.get(1);
System.out.println(obj2.get("1")); // 取嵌套對象

2. 高性能解析與異常處理(JSONParser)

JSONParser parser = new JSONParser();
try {
    Object obj = parser.parse(jsonString);
    // 處理 obj...
} catch (ParseException pe) {
    System.err.println("Error at position " + pe.getPosition() + ": " + pe.getMessage());
}

3. 容器工廠:自定義 Map/List 實現

ContainerFactory factory = new ContainerFactory() {
    public List creatArrayContainer() { return new LinkedList(); }
    public Map createObjectContainer() { return new LinkedHashMap(); }
};
Map json = (Map) parser.parse(jsonText, factory);
// 遍歷保持插入順序
for (Map.Entry entry : json.entrySet()) {
    System.out.println(entry.getKey() + " => " + entry.getValue());
}
System.out.println(JSONValue.toJSONString(json)); // 序列化回字符串

4. SAX 流式處理:可暫停的 Key 查找器

實現 ContentHandler,在邏輯點返回 false 暫停解析,稍後恢復:

class KeyFinder implements ContentHandler {
    private String matchKey;
    private Object value;
    private boolean found, end;

    public void setMatchKey(String key) { this.matchKey = key; }
    public Object getValue() { return value; }
    public boolean isFound() { return found; }
    public boolean isEnd() { return end; }

    @Override public void startJSON() { found = false; end = false; }
    @Override public void endJSON() { end = true; }
    @Override public boolean primitive(Object value) {
        if (key != null && key.equals(matchKey)) {
            this.value = value; found = true; key = null; return false; // 暫停
        }
        return true;
    }
    @Override public boolean startObjectEntry(String key) { this.key = key; return true; }
    // 其他事件方法返回 true 繼續...
}

// 使用
KeyFinder finder = new KeyFinder();
finder.setMatchKey("id");
while (!finder.isEnd()) {
    parser.parse(jsonText, finder, true); // true 表示可暫停
    if (finder.isFound()) {
        System.out.println("Found: " + finder.getValue());
        finder.setFound(false);
    }
}

5. 完整對象圖構建(Transformer 模式)

利用棧在 SAX 事件中構建完整對象樹,最終 getResult() 返回根對象。

注意事項

  • 非線程安全:JSONParser 實例不可跨線程共用。
  • 編碼要求:輸入必須為 UTF-8。
  • 大數值處理:默認用 Long/Double,超大整數可配合容器工廠使用 BigInteger。

Maven 依賴

<dependency>
    <groupId>com.googlecode.json-simple</groupId>
    <artifactId>json-simple</artifactId>
    <version>1.1.1</version>
</dependency>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved