[["trainwishid":"45"],["trainwishid":"47"]]
外層是數組,內層每個元素也是數組,但內層數組只含一個類鍵值對字符串,**非標準 JSON**(標準應為 [{"trainwishid":"45"},{"trainwishid":"47"}])。
String raw = "[[\"trainwishid\":\"45\"],[\"trainwishid\":\"47\"]]";
// 1. 去除首尾 [[ ]]
String inner = raw.substring(2, raw.length() - 2);
// 內容: "trainwishid":"45"],["trainwishid":"47"
// 2. 按 "],[" 分割成單條
String[] items = inner.split("\\],\\[");
// items[0] = "\"trainwishid\":\"45\""
// items[1] = "\"trainwishid\":\"47\""
// 3. 每條再按 ":" 分割 key/value
for (String item : items) {
String[] kv = item.split(":", 2); // 限制分割 2 段,防值含冒號
String key = kv[0].replace("\"", ""); // trainwishid
String value = kv[1].replace("\"", ""); // 45
System.out.println(key + " = " + value);
}
trainwishid = 45
trainwishid = 47
// 1. 修正為標準 JSON
String standardJson = raw
.replace("[[", "[{") // [[ -> [{
.replace("]]", "}]") // ]] -> }]
.replace("],[", "},{") // ],[ -> },{
.replace("\":\"", "\":\""); // 保持鍵值格式
// 結果: [{"trainwishid":"45"},{"trainwishid":"47"}]
// 2. 用 Jackson/Gson/Fastjson 解析
List
| 場景 | 推薦方案 | 理由 |
|---|---|---|
| 一次性腳本/數據清洗 | 字符串分割 | 零依賴、代碼短、易理解 |
| 生產系統/長期維護 | 修正為標準 JSON + 專業庫 | 健壯、支持嵌套/轉義/類型轉換、可維護 |
| 無法修改上游格式 | 自定義解析器 | 封裝分割邏輯為工具類,隔離髒數據影響 |
JsonParser 容錯模式(如 Jackson ALLOW_UNQUOTED_FIELD_NAMES、ALLOW_SINGLE_QUOTES)。核心觀點:**能用標準 JSON 庫就別手寫解析器**;實在無法改源時,字符串替換分割是應急可行的權宜之計。