首页 > 解决方案 > 如何使用 GSON 库在 java 中贪婪地提取 JSON?

问题描述

此链接中,作者介绍了如何使用Java 的 GSON 库。主要示例展示了如何解析名为“staff.json”的 json 文件,如下所示:

{
  "name": "mkyong",
  "age": 35,
  "position": [
    "Founder",
    "CTO",
    "Writer"
  ],
  "skills": [
    "java",
    "python",
    "node",
    "kotlin"
  ],
  "salary": {
    "2018": 14000,
    "2012": 12000,
    "2010": 10000
  }
}

下面的 Java 代码可以读取文件,解析它,并创建一个加载所有上述数据的“Staff”Java 对象,最后打印名为“staff”的 Java 对象,并带有小写的“s”:

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class GsonExample2 {

    public static void main(String[] args) {

        Gson gson = new Gson();

        try (Reader reader = new FileReader("c:\\projects\\staff.json")) {

            // Convert JSON File to Java Object
            Staff staff = gson.fromJson(reader, Staff.class);
            
            // print staff object
            System.out.println(staff);

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

运行上面的代码会得到以下输出:

员工{name='mkyong', 年龄=35, 职位=[Founder, CTO, Writer], 技能=[java, python, node, kotlin], 薪水={2018=14000, 2012=12000, 2010=10000}}

假设我将以下内容附加到“staff.json”,使其看起来像这样:

{
  "name": "mkyong",
  "age": 35,
  "position": [
    "Founder",
    "CTO",
    "Writer"
  ],
  "skills": [
    "java",
    "python",
    "node",
    "kotlin"
  ],
  "salary": {
    "2018": 14000,
    "2012": 12000,
    "2010": 10000
  }
}
\x00\x0d;ldlk4jkladsfl;kmasdlk\d\g\sd===dsafdsfagf\dgas56yjghg\dafd\g\dfa
fdsaffdas]\fg\n\n\n\n\n\n\n\\t\t\t\t\t\t\\\\\s
adfdgt\\\g\\\fdgdf\sg\df<-----END OF FILE HERE NOW

如您所见,我基本上是在附加一堆显然不是 Json 格式的垃圾。

我的问题:假设您不知道文件中有多少 json 格式的数据(即技能中可能有数百个项目),我如何修改上面的 Java 代码以提取尽可能多的 json 并忽略垃圾我在新的 staff.json 文件中附加了?目标是从第一个 staff.json 输入文件中获得与上面显示的完全相同的输出。

标签: javajsongson

解决方案


推荐阅读