繁体   English   中英

使用 org.json 解析 Java 中 JSONArray 中的内部 JSON 文件

[英]Parsing internal JSON file in JSONArray in Java using org.json

我希望能够解析结构如下的 JSON 文件:

[
  {
    "id": 1,
    "name": {
      "first": "name",
      "secound": "name",
      "last": "name"
    },
    "skills": [
      "python",
      "javascript"
    ],
    "otherInfo": {
      "something": 45,
      "something2": 49
    }
  },
  {
    "id": 2,
    "name": {
      "first": "name",
      "secound": "name",
      "last": "name"
    },
    "skills": [
      "python",
      "javascript"
    ],
    "otherInfo": {
      "something": 45,
      "something2": 49
    }
  }
etc...
]

变成看起来像的东西

array(
    [0] => array(
                   0 => "id"
                   1 => "firstname"
                   2 => "otherData"
                ),
    [1] => array(
                   0 => "id"
                   1 => "firstname"
                   2 => "otherData"
                ),
etc...
)

我很确定我对如何将其转换为我想要的格式有一个想法,但是我在实际从文件中读取数据时遇到了麻烦。

我有两个主要问题:

  • 从 jar 内部读取它。
  • 大多数示例使用 json.simple,而我使用的 json 库似乎没有。

我在网上尝试了一些示例,并且在这篇文章中给出了一些答案,但没有运气,最大的问题是所有这些都提供了读取外部文件的示例,而我正在尝试读取 jar 中打包的示例。

我的项目树:

MyProject
      L src
          L myPackage
                  L MyClass.java
                  L MyJsonFile.json

我猜最接近的事情是这个(来自上面的链接):

import org.json.JSONArray;

//code

JSONArray myJSONArray = new JSONArray(Main.class.getResourceAsStream("myFile.json"));

但这似乎只会引发错误: org.json.JSONException: JSONArray initial value should be a string or collection or array.

提前致谢!

问题是org.json.JSONArray将只接受StringCollectionArray但您正在尝试传递InputStream object。 这也是错误消息所说的

org.json.JSONException: JSONArray 初始值应该是字符串或集合或数组

所以首先将InputStream转换为String

InputStream  inputStream = Main.class.getResourceAsStream("myFile.json");

InputStreamReader isReader = new InputStreamReader(inputStream);

BufferedReader reader = new BufferedReader(isReader);
  StringBuffer sb = new StringBuffer();
  String str;
  while((str = reader.readLine())!= null){
     sb.append(str);
  }

然后将其转换为JSONArray

JSONArray myJSONArray = new JSONArray(sb.toString());

在这里之后,您可以使用 for 循环迭代JSONArray ,就像这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM