从 json 文件中读取多个元素

2023-11-23

我有一个 json 文件,其中包含许多如下元素:

{ 
"code" : "hfuiew89", 
"type" : "location", 
"coordinates" : [ { "lat" : 40.9861, "lon" : 29.1046, "index" : 1 }, 
          { "lat" : 40.9976, "lon" : 29.1153, "index" : 2 }, 
          { "lat" : 40.9809, "lon" : 29.2194, "index" : 3 }] 
}
{ 
"code" : "klsdsjh", 
"type" : "location", 
"relatedTags" : [ "kolmha" ], 
"coordinates" : [ { "lat" : 40.9808, "lon" : 29.1605, "index" : 1 }, 
              { "lat" : 40.9965, "lon" : 29.1672, "index" : 2 }] 
}

我想用 gson 读取该文件,但我找到的所有示例仅适用于一个元素。因此,在读取第一个之后,抛出“预期 EOF”异常。我怎样才能克服这个问题?


物有所值...

下面的说法是不正确的。 Gson 没有内置功能来简单地处理此类 JSON 序列的反序列化。 (看评论。)

如果可以选择在 JSON 与 Java API 之间进行切换,Jackson确实有这样的功能,如下所示。

输入.json

{
"name":"A"
}
{
"name":"B"
}

JacksonFoo.java

import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.ANY;
import static com.fasterxml.jackson.annotation.PropertyAccessor.FIELD;

import java.io.File;
import java.util.Iterator;

import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonFoo
{
  public static void main(String[] args) throws Exception
  {
    ObjectMapper mapper = new ObjectMapper().setVisibility(FIELD, ANY);
    Iterator<Thing> thingsIterator = mapper.reader(Thing.class).readValues(new File("input.json"));
    while (thingsIterator.hasNext())
    {
      System.out.println(thingsIterator.next());
    }
  }
}

class Thing
{
  private String name;

  @Override
  public String toString()
  {
    return String.format("Thing: name=%s", name);
  }
}

Output:

Thing: name=A
Thing: name=B

Update:使用 Gson 的类似解决方案。

GsonFoo.java

import java.io.FileReader;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonStreamParser;

public class GsonFoo
{
  public static void main(String[] args) throws Exception
  {
    Gson gson = new GsonBuilder().create();

    JsonStreamParser parser = new JsonStreamParser(new FileReader("input.json"));
    while(parser.hasNext())
    {
      System.out.println(gson.fromJson(parser.next(), Thing.class));
    }
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 json 文件中读取多个元素 的相关文章

随机推荐

  • 如何在 PostgreSQL 中按类别选择具有最大日期组的 id?

    例如 我想按类别选择最大日期组的 id 结果是 7 2 6 id category date 1 a 2013 01 01 2 b 2013 01 03 3 c 2013 01 02 4 a 2013 01 02 5 b 2013 01 0
  • PyGTK:如何使图像自动缩放以适合其父窗口小部件?

    我有一个 PyGTK 应用程序需要加载未知大小的图像 但是我遇到的问题是 如果图像非常大或非常小 窗口布局会变得扭曲并且难以使用 我需要某种方法使图像自动缩放以适合其父窗口小部件 不幸的是 经过一些研究后 似乎没有内置或其他代码可以满足我的
  • 获取当前光标位置

    我想获取窗口当前的鼠标位置 并将其分配给2个变量x and y 相对于窗口的坐标 而不是相对于整个屏幕的坐标 我正在使用 Win32 和 C 还有一个简单的额外问题 您将如何隐藏 取消隐藏光标 您可以通过调用获取光标位置GetCursorP
  • iOS 截取多个屏幕截图

    我有一个NSURL包含一个视频 我想每秒录制该视频的一帧十次 我有可以捕获播放器图像的代码 但我无法将其设置为每秒捕获 10 帧 我正在尝试类似的操作 但它返回视频的相同初始帧 正确的次数 这是我所拥有的 AVAsset asset AVA
  • 在redshift中使用sql函数generate_series()

    我想在redshift中使用生成系列功能 但没有成功 redshift 文档说不支持 下面的代码确实有效 select from generate series 1 10 1 outputs 1 2 3 10 我想对日期做同样的事情 我尝试
  • 如何在Google Map sdk iOS中绘制从一个地方到另一个地方的路径?

    我需要在谷歌地图中找到从一个地方到另一个地方的路径 如何使用 google 地图 sdk iOS 绘制方向图 任何人都可以给出源代码 然后解释如何实现这一目标 Below i attached image also i need to ac
  • scala 中的泛型不变协变逆变

    这可能是一个非常愚蠢的问题 但即使在挠了很长时间之后我也无法理解其中的区别 我正在浏览 scala 泛型页面 https docs scala lang org tour generic classes html 这里据说 注意 泛型类型的
  • 如何使用类型特征进行条件编译?

    我正在尝试编写类似的代码here但使用 C 11 功能 不使用 Boost 工作自这个例子 我试图定义一个response trait 以及基于特征结果的条件编译 我怎样才能做到这一点 include
  • 从 XML 文档中获取指定的 Node 值

    我在浏览 XML 文档 使用 C 并获取所有必要的值时遇到问题 我成功地遍历了 XML 文档中所有指定的 XmlNodeList 成功获取了其中的所有 XmlNode 值 但我必须获取此 XmlNodeList 之外的一些值 例如
  • Webpack 和 angularJs

    我正在尝试使用 angularjs 和 webpack 运行简单的应用程序 这是我的代码 索引 html Full Name firstName lastName app js var app angular module myApp
  • 如何在 OAML 中读取位图?

    我想使用 OCAML 读取位图文件 从文件系统 并将像素 颜色 存储在具有位图维度的数组中 每个像素将占用数组中的一个单元格 我找到了这个功能Graphics dump image 图像 gt 颜色数组 数组但它不从文件中读取 影像影像应该
  • Python 正则表达式 \w 与组合变音符号不匹配?

    我有一个带有组合变音符号的 UTF8 字符串 我想将它与 w正则表达式序列 它匹配带有重音符号的字符 但如果存在带有组合变音符号的拉丁字符则不匹配 gt gt gt re match a w w wz u aoooz re UNICODE
  • jsonschema2pojo 不从 json 字符串生成 pojo 类

    我正在关注链接从 JSON 生成 Java 类 从 json 字符串 而不是从模式 创建 POJO 类 我正在使用 0 4 10 版本的 jsonschema2pojo jar 但无法生成 POJO 类 我的代码如下 public clas
  • 通过 RESTeasy 上的名称绑定将过滤器与特定方法匹配

    我正在尝试指定一个仅与我的某些 API 调用关联的预匹配过滤器 方法如下 RESTeasy 文档建议 我的代码如下所示 姓名绑定 NameBinding public interface ValidateFoo 资源 Path foo ba
  • NGINX 反向代理和访问控制允许来源问题

    我正在配置一个NGINX Reverse Proxy 在浏览器上我转到 客户端网址 https www hollywood com 那么上面的网页需要执行以下请求 服务器网址 https server hollywood com api a
  • sudoers NOPASSWD: sudo: 不存在 tty 且未指定 Askpass 程序

    我添加了一个这样的用户 adduser system home no home no create home group disabled password disabled login testuser 将用户添加到组中 adduser
  • scrapy中提取类名

    我正在尝试取消 trustpilot com 的评级 是否可以使用scrapy提取类名 我正在尝试抓取由五个单独图像组成的评级 但这些图像位于具有评级名称的类中 例如 如果评级为 2 则开始 div class star rating co
  • php:会话与数据库

    我有一个类从数据库中检索其成员 或多或少 10 个成员 我的问题是 每次从数据库 MySQL 获取它们 只在会话数组中留下一个ID 还是直接将它们存储在会话数组中 是否更有效 而且性能方面的差异这么大吗 假设数据库有 100 000 行 考
  • 将 R 诊断消息发送到 stdout 而不是 stderr

    寻找一个选项可以让我重定向 R 诊断消息 由message to stdout not stderr因为它是默认的 message手册指出 默认处理程序将消息发送到 stderr 连接 那么问题是如何改变这种默认行为 仍然保留重定向warn
  • 从 json 文件中读取多个元素

    我有一个 json 文件 其中包含许多如下元素 code hfuiew89 type location coordinates lat 40 9861 lon 29 1046 index 1 lat 40 9976 lon 29 1153