【问题标题】:Java JSON parsingJava JSON 解析
【发布时间】:2017-02-20 01:26:53
【问题描述】:

我在处理一个项目时遇到了麻烦,然后切换到另一个项目,一段时间后又回到第一个项目。

这里奇怪的是,在返回旧项目后,JSON 解析不再像以前那样工作了。

这是一个maven项目,所有的依赖都和以前一样。

所以,发生的情况是,例如我的 IntelliJ 不再识别 URL-s,之前来自控制台的图像:

现在:

如您所见,URL 为蓝色且可点击,现在为纯文本。

另外,在解析 JSON 数组时,我之前能够做类似的事情:

number = jsonArray.getJSONObject(0).getString("version");

它会返回一个字符串,但现在发生的是我收到一个错误:

INFO: org.json.JSONException: JSONObject["version"] not a string.

我正在使用这些导入:

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

我知道现在可能看起来很模糊,但请随时提出其他问题。

编辑:JSON 中的行:

version: 36928,

【问题讨论】:

  • 听起来JSON结构变了,如果你贴一个处理过的JSON的例子会更容易帮助。
  • 问题是另一个开发人员仍在他的计算机上处​​理同一个项目 - 一切正常。在 JSON 中给出错误的行如下:version: 36928,
  • "36928" 是一个字符串,36928 是一个数字。尝试使用 getInt("version") 获取数值
  • @AxelH 谢谢,我们已经尝试过了,它可以工作,但这意味着我们需要重构很多代码。我们目前正在尝试找出设置中的不同之处或导致它的原因,因为相同的代码可以在另一台 PC 上运行。
  • 相同的代码,相同的库版本,相同的 JSON?好吧,我可以向你保证,其中之一是不同的。您可以在两个项目上运行差异来比较它们。但是 IDE 不负责运行时。这与 URL 不同。

标签: java json maven intellij-idea


【解决方案1】:

尝试使用 Jackson ArrayNode 和 ObjectNode 而不是 JSONArray 和 JSONObject。

ObjectMapper mapper = new ObjectMapper();
ArrayNode arrayNode = mapper.createArrayNode();
Object obj = new Object();
arrayNode.add(mapper.createObjectNode().put("version", "Hello Stack!"));
arrayNode.addPOJO(obj);
arrayNode.get(0).get("version");

而且最好使用这个 Maven 依赖来包含 jackson:

<dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-jsr310</artifactId>
        <version>${jackson.version}</version>
</dependency>

文档在这里:http://fasterxml.github.io/jackson-databind/javadoc/2.0.0/com/fasterxml/jackson/databind/node/ArrayNode.html

【讨论】:

  • 当第一个工作正常时为什么要更改库?问题在于工作代码中的行为变化。这是很多更新...
【解决方案2】:

不同之处在于 JDK 版本和位模式。我安装了更新的 JDK 和 64 位,另一台 PC 安装了旧的 JDK 和 32 位。我不完全确定,其中有什么不同并导致了问题,但它现在又可以工作了。

谢谢大家!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 2019-06-09
    • 2017-03-18
    • 2013-01-24
    相关资源
    最近更新 更多