java 8 - javax.json - 如何从预制的 JSON 中获取特定值

java 8 - javax.json - How to get a specific value from pre-made JSON

我有这个样本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 数据库变成了 Json 结构。

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 中。

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

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

我尝试做的是:

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

这给了我一个 "cannot find symbol" 编译错误,在 "jsonst.getJsonArray("Elements")"

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

我使用的是什么程序、文本编辑器、版本等?

请保留 java 和 javax.json 的答案,我慢慢尝试的艰难道路之一是让图书馆使用 json。我宁愿不去寻找另一个。

尝试:

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

并修改 read 而不是 readObject:

的行
JsonStructure jsonst = reader.readObject();
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>

所以这一行可以得到reader。

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

你的问题是JsonStructure is an interface that doesn't have the method getJsonArray, but JsonObject

因此,您需要做

JsonObject jsonst = reader.readObject();

然后你可以像这样使用 the methods of JsonObject

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();