欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

fastjson 解析特殊分隔符json

吉茹定2年前10瀏覽0評論

Fastjson是一個高效的JSON解析器,可以解析各種JSON格式的數據。但是,有時候我們會遇到帶有特殊分隔符的JSON格式數據,如何解析呢?下面是一個例子。

{
"name": "張三",
"score": {
"數學": "90分|優(yōu)秀",
"語文": "85分|良好"
}
}

上面的JSON數據中,數學和語文的成績都是用豎線”|”分隔的。如果我們直接使用Fastjson解析這個數據,會發(fā)現得到的成績數據并不是我們期望的JSON格式。

{
"數學": "90分|優(yōu)秀",
"語文": "85分|良好"
}

解決這個問題的方法很簡單,只需重寫JSONReader類中的readObject方法。

public class MyJSONReader extends JSONReader {
@Override
protected Object readObject(JSONLexer lexer, Type type, Object fieldName, Object object) {
// 判斷是否是score字段
if (fieldName.equals("score")) {
MapscoreMap = new HashMap<>();
// 解析score字段的值
lexer.nextToken(); // 左大括號
while (lexer.token() != JSONToken.RBRACE) { // 右大括號
String key = lexer.stringVal(); // 成績項名稱
lexer.nextToken();
String value = lexer.stringVal(); // 成績和等級
String[] scoreAndLevel = value.split("\\|"); // 使用正則表達式分隔成績和等級
scoreMap.put(key, scoreAndLevel[0]); // 只保存成績,不保存等級
lexer.nextToken();
}
return scoreMap;
} else {
return super.readObject(lexer, type, fieldName, object);
}
}
}

在重寫的readObject方法中,我們首先判斷當前解析的字段是否是”score”,如果是則進入自己的解析邏輯。我們可以使用Java自帶的正則表達式功能,根據豎線”|”分隔成績和等級,并只保存成績。

使用重寫后的MyJSONReader類,我們可以完成對帶有特殊分隔符JSON數據的解析。

public class Demo {
public static void main(String[] args) {
String jsonStr = "{\n" +
"  \"name\": \"張三\",\n" +
"  \"score\": {\n" +
"    \"數學\": \"90分|優(yōu)秀\",\n" +
"    \"語文\": \"85分|良好\"\n" +
"  }\n" +
"}";
MyJSONReader reader = new MyJSONReader();
MapscoreMap = reader.readObject(jsonStr, Map.class);
System.out.println(scoreMap.get("數學")); // 輸出90分
}
}

以上就是使用Fastjson解析帶有特殊分隔符JSON數據的方法,希望能對您有所幫助。