【问题标题】:java 8 - javax.json - How to get a specific value from pre-made JSONjava 8 - javax.json - 如何从预制 JSON 中获取特定值
【发布时间】:2016-03-16 11:22:52
【问题描述】:

我有这个示例 JSON 对象

{
"Elements" : [
    {
    "name" : "Hydrogen",
    "Symbol" : "H",
    "atomicNumber" : "1",
    "electronegativity" : "2.2",
    "group" : "Hydrogen",
    "ionCharge1" : "1+",
    "ionCharge2" : "1-",
    "molarMass" : "1.01",
    "naturalState" : "Gas",
    "synthetic" : "false",
    "diatomic" : "true",
    "columnNumber" : "1",
    "row" : "1",
    "columnCode" : "IA",

    "nobleGasConfiguration" : [
        {
        "term:" : "No Noble Gas Configuration",
        "superScript" : "-"
        }
    ],
    "electronConfiguration" : [
        {
        "term" : "1s",
        "superScript" : "1"
        }
    ]
    }
}

通过以下代码,我将 Json 数据库转换为 JsonStructure。

import javax.json.Json;
import javax.json.JsonReader;
import javax.json.JsonStructure;
import java.io.*;

public class DataTest
{
public static void main(String[]args) throws IOException
{
    String strName;
    JsonReader reader = Json.createReader(new FileReader("Elements.JSON"));
    JsonStructure jsonst = reader.read();

    /*strName = jsonst.
* get.JsonObject(String name)
* get.JsonArray(String name)
* get.JsonString(String name).getString()
*/
}
}

我想要做的只是获取“name”的值,该值是“Hydrogen”,这个值将被放置在变量 strName 中。

这几天我一直在努力完成类似这样的基本事情,但任何事情都让我偏离了我的真实意图。其他一切都失败或从未奏效。

我最近的尝试是使用代码底部注释掉的方法,我相信我有完成这项工作所需的方法。 (这些方法从以下链接获得:https://docs.oracle.com/javaee/7/api/javax/json/JsonObject.html

我试图做的是:

jsonst.getJsonArray("Elements").getJsonObject(0).getJsonString("name").getString();   

这给了我一个“找不到符号”编译错误,在“jsonst.getJsonArray(“Elements”)”期间带有 ^

那么,我做错了什么?我怎样才能完成这个简单的任务?

我正在使用哪些程序、文本编辑器、版本等?

  • 命令提示符
  • 记事本
  • Java 8
  • javax.json-1.0.jar

请保留 java 和 javax.json 的答案,我慢慢冒险的艰难道路之一是获得一个使用 json 的库。我宁愿不费心去找另一个。

【问题讨论】:

  • 我强烈建议使用 IDE 而不是记事本和命令提示符
  • 我正在使用命令提示符和记事本,因为这就是我们在计算机科学 120 中所做的。:P 一旦我完成了这个额外的项目,我确实打算看看 IDE

标签: java json command-prompt notepad


【解决方案1】:

所以这条线很容易吸引读者。

JsonReader reader = Json.createReader(new FileReader("Elements.JSON"));

您的问题是JsonStructure 是一个interface,它没有getJsonArray 方法,但JsonObject 有。

因此,你需要这样做

JsonObject jsonst = reader.readObject();

然后你可以像这样使用the methodsJsonObject

JsonArray elements = jsonst.getJsonArray("Elements");
for (int i = 0; i < elements.size(); i++) {
    JsonObject element = elements.getJsonObject(i);
    String name = element.getString("name");
}

最后,当你用完reader,你需要close它。

reader.close();

【讨论】:

  • 最后,我得到了一些有用的东西。现在我有很多实验要做,所以我可以完全理解这段代码。感谢大家的帮助!
【解决方案2】:

尝试:

jsonst.getJsonArray("Elements")[0].getJsonString("name");

同时修改 read 而不是 readObject 的行:

JsonStructure jsonst = reader.readObject();

【讨论】:

  • 我有 4 个编译错误。前 3 个位于 jsonst.getJsonArray("Elements").getJsonObject(0).getString("name");编译 #1 ")" 预期在 "("name") 的 n 处,在 "("name")" 的末尾 (") 编译 #2 未封闭的字符串文字。编译#3“预期的”;“在行尾”。编译#4,在我看来是最常见的,“解析时到达文件末尾”
  • Down to 1 error: cannot find symbol at the period in: jsonst.getJsonArray("Elements") 这可能是因为我下载的特定库不是吗?
  • 知道您解决了您的问题,但请参考更新后的答案,它可能会有所帮助!
【解决方案3】:
reader.readObject().getJsonArray("Elements").getJsonObject(0).getString("name")

添加maven依赖细节

    <dependency>
        <groupId>javax.json</groupId>
        <artifactId>javax.json-api</artifactId>
        <version>1.0</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.json</artifactId>
        <version>1.0.4</version>
    </dependency>

【讨论】:

  • 我在“jsonst.readArray()”的时间段得到“找不到符号”。我想知道我是否缺少一两个导入...
  • 从头开始缺少导入,没有意义,因为 read() 有效,并且 read() 和 readArray() 与 JsonReader 一起使用
  • 我刚刚注意到我的一个重大错误。所以刮掉上面的那两个 cmets...
  • 好的,现在修复了这个错误,我得到一个编译错误说:字符串不能转换为 JsonStructure
  • 用我正在使用的 maven 依赖项更新了帖子。
猜你喜欢
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多