簡體   English   中英

使用 Java 讀取 JSON 文件

[英]Read JSON-File with Java

我嘗試閱讀以下 JSON 文件:

[
  {
    "0": {
      "owner_ip": 0,
      "id": 0,
      "text": "test",
      "timestamp": ""
    }
  },
  {
    "1": {
      "owner_ip": 0,
      "id": 1,
      "text": "test",
      "timestamp": ""
    }
  },
  {
    "2": {
      "owner_ip": 0,
      "id": 2,
      "text": "test",
      "timestamp": ""
    }
  },
  {
    "3": {
      "owner_ip": 0,
      "id": 3,
      "text": "test",
      "timestamp": ""
    }
  },
  {
    "4": {
      "owner_ip": 0,
      "id": 4,
      "text": "test",
      "timestamp": ""
    }
  }
]

我導入了以下包:

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;

我想獲取“0”->“text”的值,我執行如下操作:

JSONParser jsonParser = new JSONParser();

try(FileReader reader = new FileReader("filename"){
    Object obj = jsonParser.parse(reader);
    JSONArray readList = (JSONArray) obj;
    System.out.println(readList);
    System.out.println(readList.get(0));
    System.out.println(readList.get(0).getClass().getName());
    // Output = {"0":{"owner_ip":0,"id":0,"text":"test","timestamp":""}}
    // Output = org.json.simple.JSONObject

在此之后,我不知道如何進一步編碼。 我嘗試了很多不同的方法,但沒有任何效果。 我希望你能幫助我。

您的 JSON 格式奇怪。 它有一個對象數組,這些對象有一個條目,其鍵與它們在循環中的索引相同。

第一個元素的text條目的 JSON 路徑將是

json[0]["0"].text

您會看到0兩次,因為您需要首先 select 是數組的第一個元素,然后是 object 在該數組中的鍵為"0"

在您的代碼中,您可以這樣做:

JSONArray array = (JSONArray) jsonParser.parse(reader);
JSONObject obj = (JSONObject) array.get(0);
JSONObject nestedObj = (JSONObject) obj.get("0");
String textValue = (String) nestedObj.get("text");
System.out.println(textValue);

雖然我建議修復 JSON 的格式。 嵌套的 object 似乎完全沒有必要。

最終,您的 JSON 將如下所示:

[
  {
    "owner_ip": 0,
    "id": 0,
    "text": "test",
    "timestamp": ""
  },
  {
    "owner_ip": 0,
    "id": 1,
    "text": "test",
    "timestamp": ""
  },
  {
    "owner_ip": 0,
    "id": 2,
    "text": "test",
    "timestamp": ""
  },
  {
    "owner_ip": 0,
    "id": 3,
    "text": "test",
    "timestamp": ""
  },
  {
    "owner_ip": 0,
    "id": 4,
    "text": "test",
    "timestamp": ""
  }
]

然后你可以跳過代碼中的obj.get("0")行。

JSONArray array = (JSONArray) jsonParser.parse(reader);
JSONObject obj = (JSONObject) array.get(0);
String textValue = (String) obj.get("text");
System.out.println(textValue);

如果您確定結構保持不變,

JSONArray readList = (JSONArray) obj;
JSONObject targetObj = readList.get(0);
System.out.println(targetObj.get("text")); // will print "test"

或者您可以迭代拋出 JSONArray。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM