簡體   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