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

Java 字符串轉 JSON 數組並遍歷:基於 net.sf.json 實戰指南

     編輯:Java 綜合教學

前言

在 Java 開發中,經常需要將前端傳遞或配置文件中的 JSON 格式字符串解析為對象模型進行業務處理。本文介紹基於經典 net.sf.json (json-lib) 庫的字符串轉 JSON 數組、對象遍歷、屬性提取完整流程,並補充現代替代方案建議。

一、依賴準備

Maven 坐標:

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

核心依賴傳遞:commons-lang、commons-beanutils、commons-collections、commons-logging、ezmorph。

二、核心類說明

三、完整代碼實戰

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class JsonArrayParseDemo {
    public static void main(String[] args) {
        // 1. 原始 JSON 字符串(注意:標準 JSON 要求鍵用雙引號,json-lib 對單引號兼容較好)
        String str = "[{'name':'a','value':'aa'},{'name':'b','value':'bb'},{'name':'c','value':'cc'},{'name':'d','value':'dd'}]";
        
        // 2. 字符串 → JSONArray
        JSONArray jsonArray = JSONArray.fromObject(str);
        
        // 3. 遍歷數組
        if (jsonArray.size() > 0) {
            for (int i = 0; i < jsonArray.size(); i++) {
                // 3.1 獲取第 i 個 JSONObject
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                
                // 3.2 提取屬性值
                String name = jsonObject.getString("name");
                String value = jsonObject.getString("value");
                
                // 3.3 業務處理
                System.out.println(name + " = " + value);
                // 輸出:
                // a = aa
                // b = bb
                // c = cc
                // d = dd
            }
        }
        
        // 進階:直接獲取所有 name 組成 List
        // List names = jsonArray.stream()
        //     .map(obj -> ((JSONObject)obj).getString("name"))
        //     .collect(Collectors.toList());
    }
}

四、關鍵 API 速查

類包用途
JSONArraynet.sf.jsonJSON 數組對象,對應 [...]
JSONObjectnet.sf.jsonJSON 對象,對應 {...}
方法說明返回類型
JSONArray.fromObject(String)字符串解析為 JSONArrayJSONArray
jsonArray.size()數組長度int
jsonArray.getJSONObject(int index)按索引獲取 JSONObjectJSONObject
jsonArray.get(int index)按索引獲取原始值Object
jsonObject.getString(String key)獲取字符串屬性(自動轉型)String
jsonObject.getInt(String key)獲取整數屬性int
jsonObject.get(String key)獲取原始值Object
jsonObject.containsKey(String key)判斷鍵是否存在boolean

五、常見坑與最佳實踐

  1. 單引號 vs 雙引號:標準 JSON 必須雙引號,json-lib 兼容單引號,但建議生產環境使用標準格式
  2. 空值處理:getString("missing") 返回 null,不拋異常;getInt("missing") 返回 0
  3. 類型轉換安全:優先使用 getString/getInt 等強類型方法,避免手動 Cast
  4. 大數據量性能:json-lib 基於反射,性能一般。高吞吐場景建議遷移至 Jackson 或 Gson
  5. 線程安全:JSONArray/JSONObject 非線程安全,多線程環境需同步或使用 ThreadLocal

六、現代替代方案推薦

Jackson 等價代碼

ObjectMapper mapper = new ObjectMapper();
List> list = mapper.readValue(str, 
    new TypeReference>>() {});
for (Map map : list) {
    System.out.println(map.get("name") + " = " + map.get("value"));
}

七、總結

掌握 JSON 字符串與 Java 對象互轉是 Web 開發基本功。net.sf.json 雖然歷史悠久、API 直觀,但新項目強烈建議直接使用 Jackson 或 Gson,獲得更好性能、類型安全與生態支持。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
庫特點Maven 坐標
Jackson高性能、流式解析、註解豐富、Spring Boot 默認com.fasterxml.jackson.core:jackson-databind
GsonGoogle 出品、API 簡潔、對 Kotlin 友好com.google.code.gson:gson
Fastjson阿里出品、極速、國產化首選(注意版本安全漏洞)com.alibaba:fastjson2