一、需求
由于需要将json存储在influxdb中,为了解析各个key/value所以需要变换成HashMap.
二、所用依赖
Maven:
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.0</version> </dependency>
三、代码
/** * JSON 转成key,value映射表 * @param jsonNode * @param map */ public static void Json2Map(JsonNode jsonNode, Map<String, String> map) { Iterator<Entry<String, JsonNode>> fields = jsonNode.fields(); while(fields.hasNext()) { Entry<String, JsonNode> entry = fields.next(); String key = entry.getKey(); JsonNode value = entry.getValue(); // 如果子节点可以迭代,则继续迭代 if(value.isContainerNode()) { Json2Map(value,map); }else{ map.put(key, value.asText()); } } }
使用代码:
JsonNode jsonNode = new ObjectMapper().readTree(msgBody); //msgBody为String json Map<String, String> map = new HashMap<String, String>(); Json2Map(jsonNode,map); Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); // 迭代添加到influxdb point builder中 while(it.hasNext()) { Map.Entry<String, String> entry = it.next(); pointBuilder.addField(entry.getKey(), entry.getValue());//业务代码 }
例如JSON:
{ "a": { "a1": "43.23", "a2": 32.32, "a3": 35, "a4": { "a4-1": 3235 } }, "b": { "b1": 432, "b2": "543.23" }, "c1": 443232, "d1": "432432.432" }
迭代后输出:
格式:key=value
a1=43.23
a2=32.32
a3=35
a4-1=3235
b1=432
b2=543.23
c1=443232
d1=432432.432