【问题标题】:Check the Keys of an external JSON File in Java在 Java 中检查外部 JSON 文件的密钥
【发布时间】:2020-02-19 19:27:24
【问题描述】:

正如标题所述,我想检查 Java 中外部 Json 文件的密钥。

我尝试了什么:

JSONObject json = new JSONObject("src/com/json/inventory.json");
System.out.println(json.keys());

问题:什么都不做。

还有哪些其他可能性?

提前致谢!

编辑 Error

【问题讨论】:

  • Doesn't do anything 是什么意思?
  • 你的 JSONObject 的全类名是什么?
  • 请编辑您的帖子并添加执行这些行时打印的错误堆栈。顺便说一句,Doesn't do anythingGives out an error 根本不是一回事。
  • JSONObject 不能处理这样的简单字符串路径。您得到的错误是因为构造函数 JSONObject(String) 等待序列化 JSON,而不是文件路径。这就是为什么异常说:必须以'{'开头
  • 它没有查看文件的内容。它正在解析您提供的文件路径,就好像 that 是 json。查看您正在使用的JSONObject 的API 文档(这可能是@AliceOualouest 要求上面的完整类名的原因)以找到通过文件执行此操作的方法(或将文件内容加载到String使用任何普通的文件 IO)。

标签: java json file parsing


【解决方案1】:

如果您使用this library,首先您应该阅读文件内容,例如:

String unparsedJson = Files.readAllLines(Paths.get("src/com/json/inventory.json"))
                .stream()
                .reduce((a,b) -> a + b)
                .get();

然后你就可以用你提供的代码解析json了:

JSONObject json = new JSONObject(unparsedJson);

然后用类似这样的方式遍历键:

json.keys().forEachRemaining(key -> {
            System.out.println(key);
        });

您还可以使用其他库,例如 JacksonGson

【讨论】:

  • 嘿,是的,我确实使用 org.json。似乎出现了一个错误:“java.nio.charset.MalformedInputException: Input length = 1”在:String unparsedJson = Files.readAllLines(Paths.get("src/com/json/inventory.json")) -线
  • 文件编码好像有问题;看看this thread
【解决方案2】:
  1. 从资产文件夹中获取 JSON 文件
  2. 从 JSON 打印所有密钥

-

private String getJSonFromAssets(){
    String json = null;
    try {
        InputStream is = getAssets().open("colorAndValue.json");
        int size = is.available();
        byte[] buffer = new byte[size];
        is.read(buffer);
        is.close();
        json = new String(buffer, "UTF-8");
    } catch (IOException e) {
        e.printStackTrace();
    }
    return json;
}

---

try {
        JSONObject jsonObject = new JSONObject(getJSonFromAssets());
        Iterator<String> keys = jsonObject.keys();
        while(keys.hasNext()) {
            String key = keys.next();
            System.out.println(key);
            Log.d("innerKey", "key " + key);
        }
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

你的输出会像 1.键颜色0 2.键颜色1 3.键色2 4.键色3 5.键色4 6. 主色5

【讨论】:

  • 似乎有错误 getAsses().open - 无法识别方法。你用什么库?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-18
  • 1970-01-01
  • 2011-09-09
  • 2017-12-31
  • 1970-01-01
相关资源
最近更新 更多