Json文件解析

代码功能:对kafka等工具输出的json流文件进行解析

实现工具:jsonpath     jackjson    fastjson

代码实现:

// 用jsonpath实现如下:

public class JsonParser extends Parser {
@Override
public Map<String, String> parse(String inputStr) throws ParserException {

return null;
}

public static void main(String[] args) {

String inputStr = "{ \n" + " \"国家\": { \n" + " \"中国\": { \n" + " \"省份\": \n" + " { \n" + " \"名称\": \"浙江\", \n" + " \"城市\": [ \n" + " \"杭州\", \n" + " \"宁波\" \n" + " ] \n" + " }, \n" + " \n" + " } \n" + " }\n" + "}\t";
try {
JSONObject jsonObject = new JSONObject(inputStr);

Iterator iterator = jsonObject.keys();
while (iterator.hasNext()) {
String key = (String) iterator.next();
String value = jsonObject.getString(key);
System.out.println(key + "--" + value);
}
} catch (Exception e) {
e.printStackTrace();
}
}
实现结果:
国家--{"中国":{"省份":{"名称":"浙江","城市":["杭州","宁波"]}}}
===============================================================================================================================
//用jackjson实现如下:
public class JsonParserJackJson extends Parser {

@Override
public Map<String, String> parse(String inputStr) throws ParserException {
return null;
}

Map<String, Object> other = new HashMap<String, Object>();

@JsonAnySetter
public void set(String key, Object value) {
other.put(key, value);
System.out.println("目前的K值:" + key);
System.out.println("解析的json文件:" + other);

Set<String> keySet = other.keySet();
for (String keys : keySet) {
HashMap<String, String> keyValue = (HashMap<String, String>) other.get(keys);
Set<String> keySet2 = keyValue.keySet();
for (String key2 : keySet2) {
System.out.println("目前的K值:" + key2);
System.out.println("K值集合:" + keys + "-" + key2 );
}
}
}


public static InputStream getStringStream(String inputStr) {
if (inputStr != null && !inputStr.trim().equals("")) {
try {
ByteArrayInputStream inputStringStream = new ByteArrayInputStream(inputStr.getBytes());
return inputStringStream;
} catch (Exception ex) {
ex.printStackTrace();
}
}
return null;
}

public static void main(String[] args) {
String inputStr = "{ \n" + " \"国家\": { \n" + " \"中国\": { \n" + " \"省份\": \n" + " { \n" + " \"名称\": \"浙江\", \n" + " \"城市\": [ \n" + " \"杭州\", \n" + " \"宁波\" \n" + " ] \n" + " } \n" + " \n" + " } \n" + " }\n" + "}\t";
ObjectMapper mapper = new ObjectMapper();
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
try {
mapper.readValue(getStringStream(inputStr), JsonParserJackJson.class);
} catch (IOException e) {
e.printStackTrace();
}
}
}

实现结果:
目前的K值:国家
解析的json文件:{国家={中国={省份={名称=浙江, 城市=[杭州, 宁波]}}}}
目前的K值:中国
K值集合:国家-中国
===================================================================================================
//用fastjson实现如下:
public class JsonParseFastJson {

public static void main(String[] args) {
String jsonStr = "{ \n" + " \"国家\": { \n" + " \"中国\": { \n" + " \"省份\": \n" + " { \n" + " \"名称\": \"浙江\", \n" + " \"城市\": [ \n" + " \"杭州\", \n" + " \"宁波\" \n" + " ] \n" + " }, \n" + " \n" + " } \n" + " }\n" + "}\t";
System.out.println("无序遍历结果:");
JSONObject jsonObj = JSON.parseObject(jsonStr);
for (Map.Entry<String, Object> entry : jsonObj.entrySet()) {//一个entry代表一个属性,key是属性名,value是属性值
System.out.println(entry.getKey() + ":" + entry.getValue());
}

System.out.println("有序遍历结果:");
LinkedHashMap<String, String> jsonMap = JSON.parseObject(jsonStr, new TypeReference<LinkedHashMap<String, String>>() {
});
for (Map.Entry<String, String> entry : jsonMap.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
}

实现结果:
无序遍历结果:
国家:{"中国":{"省份":{"名称":"浙江","城市":["杭州","宁波"]}}}
有序遍历结果:
国家:{"中国":{"省份":{"名称":"浙江","城市":["杭州","宁波"]}}}



posted @ 2017-08-09 18:09  疯码牛Pro  阅读(342)  评论(0编辑  收藏  举报