Java GSON&x2B;从webservice解析json并获取特定JsonObject的json字符串
我有一个从webservice读取json的场景。这个Json是一个包含大量数据的节点数组 我想要达到的目标:Java GSON&x2B;从webservice解析json并获取特定JsonObject的json字符串,java,json,gson,Java,Json,Gson,我有一个从webservice读取json的场景。这个Json是一个包含大量数据的节点数组 我想要达到的目标: 对于数组中的每个节点,只读必需元素。使用GSON对象模型完成此操作 对于数组中的每个节点,需要该特定节点的Json字符串,并将其作为字符串从步骤1添加到Java对象中 步骤2是必需的,因为Java impl将调用另一个服务,而该服务反过来需要每个节点的json进行进一步处理 我为实现这一目标所做的努力: 使用步骤1的对象模型创建java对象 使用带有JsonArray.class的对象
[
{
"name": "Joe",
"age" : 35,
"position": "dev",
"salary": 10000,
"skills":[ "angular", "aws", "java"],
"Organistaion" : "Test",
"WorkType": "Full-time"
},
{
"name": "John",
"age" : 29,
"position": "dev",
"salary": 10000,
"skills":[ "python", "c#", "java"],
"Organistaion" : "Test",
"WorkType": "Full-time"
}
]
Staff.java:
public class Staff {
private String name;
private int age;
private String staffJson;
.......
}
StaffSandbox.java:
public class StaffSandbox {
public static void main (String s[]) {
Gson gson = new Gson();
try (Reader reader = new FileReader("C:\\staff.json")) { // for sample code use file
// Step 1
List<Staff> staffs = gson.fromJson(reader, new TypeToken<List<Staff>>() {}.getType());
staffs.forEach(System.out::println);
// Step 2
String json = new String(Files.readAllBytes(Paths.get(("C:\\staff.json"))));
JsonArray jsonElement = gson.fromJson(json, JsonArray.class);
System.out.println( gson.toJson(jsonElement.get(0)).toString());
// Step 3
for (int i = 0; i < json.size(); i++) {
// Read the node Id and match with corresponding Staff object and add the json to it
}
} catch (IOException e) {
e.printStackTrace();
}
}
公共类StaffSandbox{
公共静态void main(字符串s[]{
Gson Gson=新的Gson();
请尝试(Reader=newfilereader(“C:\\staff.json”){//,以获取示例代码使用文件
//第一步
List staff=gson.fromJson(reader,new-TypeToken(){}.getType());
forEach(System.out::println);
//步骤2
String json=新字符串(Files.readAllBytes(path.get(((“C:\\staff.json”)));
JsonArray jsonElement=gson.fromJson(json,JsonArray.class);
System.out.println(gson.toJson(jsonElement.get(0)).toString());
//步骤3
for(int i=0;i
}
我是否使用了正确的方法?两次解析Json可以吗?有没有更好的方法来实现这一点
不是真的。您可以避免两次读取该文件,并在第二次读取时节省大量内存:您正在将整个文件读取到字节数组,首先将其转换为字符串,然后再转换为JSON数组。对大型文件测试这种方法,您可能会遇到OutOfMemoryError
我不喜欢使用JsonReader,但这是一个更好的解决方案吗?如果是,如何证明
JsonReader
以流式方式将JSON输入标记化,在许多情况下,它可以为您提供很多帮助
如果我理解正确,你只需要这样:
private static void-zip(最终Gson-Gson、最终阅读器、最终消费者