处理表示二维矩阵的有效 JSON 时:
[ { "a":1, "b":2 }, { "b":3, "c":4 }, { "c":6, "a":5 } ]
使用 Java 1.8 和 json-simple 库:
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
能够使用以下方法获取单独的行吗?:
JSONParser parser = new JSONParser();
Object obj = parser.parse(args[0]);
JSONArray array = (JSONArray) obj;
System.out.println(array.get(0));
输出:
{"a":1,"b":2}
我的问题是如何从这个二维矩阵中提取键值来输出:
'{ "a": [1,null,5], "b": [2,3,null], "c": [null,4,6] }'
请注意,行中缺少的任何变量都应插入 null...
最佳答案
一般解决方案如下所示:
- 将
JSON
负载读取为 ARRAY。 - 在 ARRAY 中的所有
JSON 对象
中查找所有可能的键,并将它们存储在 KEYS 集中。 - 迭代ARRAY中的所有
JSON对象
。- 迭代所有KEY并从给定的
JSON对象
获取值或null
。
- 迭代所有KEY并从给定的
使用Java 8
功能我们可以实现如下:
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
public class JsonSimpleApp {
public static void main(String[] args) throws ParseException {
// input
String json = "[ { \"a\":1, \"b\":2 }, { \"b\":3, \"c\":4 }, { \"c\":6, \"a\":5 } ]";
// read as JSONArray
JSONParser parser = new JSONParser();
JSONArray array = (JSONArray) parser.parse(json);
// Find all possible keys
Set<String> keys = (Set<String>) array.stream().flatMap(i -> ((JSONObject) i).keySet().stream()).collect(Collectors.toSet());
// create result Map with KEY - LIST pair
Map<String, List<Object>> result = new HashMap<>();
keys.forEach(key -> result.put(key, new ArrayList<>()));
// Iterate over all JSONObject's
array.forEach(item -> {
JSONObject object = (JSONObject) item;
// For each possible key add a value or NULL to each list
keys.forEach(key -> result.get(key).add(object.remove(key)));
});
result.entrySet().forEach(System.out::println);
}
}
上面的代码打印:
a=[1, null, 5]
b=[2, 3, null]
c=[null, 4, 6]
关于java - 从二维矩阵中提取 JSON 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59847647/