【问题标题】:Java - javax.json - Compile Error: "cannot find symbol" for .getValueType() - Can't seem to figure out whyJava - javax.json - 编译错误:.getValueType() 的“找不到符号” - 似乎无法弄清楚原因
【发布时间】:2016-03-17 13:12:33
【问题描述】:

我有一个数据库,通过我的代码,我将我的数据库放入一个 JsonArray 并开始遍历 JsonArray(仅找到 JsonObjects)。从那里,我相信我有这个设置,所以我可以遍历每个 JsonObject 的属性。但是,每个 JsonObject 都包含 Json 字符串和 Json 数组。现在,我正在试验,所以我尝试为数组创建一个手动异常,基本上我尝试设置它的方式是,如果你正在处理 Json 字符串,则只做你的工作。

import javax.json.Json;
import javax.json.JsonReader;
import javax.json.JsonStructure;
import javax.json.JsonObject;
import javax.json.JsonArray;
import javax.json.JsonValue;
import java.util.Iterator;
import java.util.Collection;
import java.io.FileReader;
import java.io.IOException;

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

    JsonArray elements = jsonst.getJsonArray("Elements");
    for (int i = 0; i < elements.size(); i++) 
    {
        JsonObject element = elements.getJsonObject(i);
        Collection<String> elementValues = element.keySet();
        Iterator<String> elementKeys = elementValues.iterator();
        while(elementKeys.hasNext())
        {
        //Error is over here!!!
            if(elementKeys.next().getValueType().equals(JsonValue.ValueType.STRING))
            {
                String elementKey = (String)elementKeys.next();
                strValue = element.getString(elementKey);
                System.out.println(strValue);
            }
        }
    }

    reader.close();
}
}

我相信我有正确的导入,但是当我尝试编译它时,编译器在 .getValueType() 方法处给我“找不到符号”。 (我在我的代码中留下了一条评论说“错误在这里!!!”,这个方法的行就在该评论的正下方)

我还检查了比较的格式,以下是复制粘贴自:http://www.programcreek.com/java-api-examples/index.php?api=javax.json.JsonString if ((results.getValueType().equals(JsonValue.ValueType.STRING))

这是我数据库的一小部分:

{
"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"
        }
    ]
    }
}

我怀疑这可能与诸如子接口、超级接口、实现的类等之类的事情有关。本质上是试图将方法与无法访问该方法的事物一起使用。但是,据我了解,这应该可行。

这里是您可能需要的 api 文档:

http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html

http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html

https://docs.oracle.com/javaee/7/api/javax/json/JsonValue.html

https://docs.oracle.com/javaee/7/api/javax/json/JsonObject.html

https://docs.oracle.com/javaee/7/api/javax/json/JsonArray.html

为了清楚地说明我的问题......为什么编译器会给我一个“找不到符号”?我必须对代码进行哪些更改才能解决此问题?

我正在使用什么程序、版本等?

记事本

命令提示符

Java 8

javax.json-1.0.jar

请保留javax.json和java的答案。

【问题讨论】:

  • elementsKey.next() 返回一个字符串,其中不包含方法getValueType()。可能就是这样。

标签: java json command-prompt notepad


【解决方案1】:

您收到错误是因为elementKeys.next() 返回一个String,它没有getValueType() 方法。您不需要 if 检查,也不需要 (String)elementKeys.next(); 中的演员表。只需删除它们就可以了。

【讨论】:

  • 如果我这样做,我会遇到另一个问题(这个问题在我对上述评论的回复中有所描述)
  • 嗯,由于某种原因,现在缺少该评论。估计被删了所以,问题就在于 strValue = element.getString(elementKey);计划是什么,我遍历 json 对象值,将该值分配给一个字符串,然后将该字符串传递给一个类的实例。 (该课程尚未制作,所以现在我只是打印字符串)。数组包含需要格式化的字符串。我想首先确保其余代码工作正常。我需要 if 语句来告诉程序跳过数组。
  • 新的错误是我正在尝试使用 .getString 来获取一个数组(一旦我到达 json 对象中的第一个数组)
猜你喜欢
  • 1970-01-01
  • 2018-04-29
  • 1970-01-01
  • 2021-12-16
  • 2011-07-08
  • 1970-01-01
  • 2020-11-14
  • 2021-06-04
  • 2016-03-12
相关资源
最近更新 更多