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

标签 java json command-prompt notepad

我有这个示例 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 的库。我不想再费力去寻找另一个。

最佳答案

所以这句话对于读者来说是可以的。

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

你的问题是JsonStructure是一个接口(interface),没有方法getJsonArray,但是 JsonObject做。

因此,你需要这样做

JsonObject jsonst = reader.readObject();

然后你可以使用the methods 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();

关于java 8 - javax.json - 如何从预制 JSON 中获取特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36024869/

相关文章:

android - 在 Firebase 上使用多个 JSON 文件

windows - windows 的 "notify-send"等效项是什么?

c++ - 命令提示符 "runas user:<admin-user> <command>"未正确执行

c++ - 如何使用CreateProcess在cmd中执行命令?

Java Metal Look & Feel 在最大化时隐藏 Windows 工具栏

java - 如何使用 Spring RestTemplate 发送数组?

java - 如何以指定的时间间隔自动定期调用 servlet

javascript - AngularJS - GET 响应无法在 HTML 中显示

java - 在输出文件中找不到 protobuf 服务

java - 使用 Jackson ObjectMapper 将子类名称序列化为 JSON,而不是父类(super class)