簡體   English   中英

訪問Jsons數組的元素

[英]Access to the elements of Array of Jsons

我看過很多例子,但是沒有一個例子與我想要的不一樣。

考慮我有一個JSONObject像:

[ {
  "id" : "572add95e4b0b04f4d502a3c",
  "amount" : 109.27,
  "sourceCurrency" : "MXN",
  "targetCurrency" : "USD",
  "recipientBankId" : "572add95e4b0b04f4d502a37",
  "iban" : "5805742027",
  "created" : "2016-05-05T05:43:49.194"
}, {
  "id" : "572add95e4b0b04f4d502a3e",
  "amount" : 722.41,
  "sourceCurrency" : "GBP",
  "targetCurrency" : "INR",
  "recipientBankId" : "572add95e4b0b04f4d502a32",
  "iban" : "4688276585",
  "created" : "2016-05-05T05:43:49.2"
}]

我想訪問第二個json和iban值。

我該怎么做?

用你的json內容

String json = "[ {\n" +
                "  \"id\" : \"572add95e4b0b04f4d502a3c\",\n" +
                "  \"amount\" : 109.27,\n" +
                "  \"sourceCurrency\" : \"MXN\",\n" +
                "  \"targetCurrency\" : \"USD\",\n" +
                "  \"recipientBankId\" : \"572add95e4b0b04f4d502a37\",\n" +
                "  \"iban\" : \"5805742027\",\n" +
                "  \"created\" : \"2016-05-05T05:43:49.194\"\n" +
                "}, {\n" +
                "  \"id\" : \"572add95e4b0b04f4d502a3e\",\n" +
                "  \"amount\" : 722.41,\n" +
                "  \"sourceCurrency\" : \"GBP\",\n" +
                "  \"targetCurrency\" : \"INR\",\n" +
                "  \"recipientBankId\" : \"572add95e4b0b04f4d502a32\",\n" +
                "  \"iban\" : \"4688276585\",\n" +
                "  \"created\" : \"2016-05-05T05:43:49.2\"\n" +
                "}]";

您首先需要從json內容獲取JSONArray:

JSONArray array = new JSONArray(json);

然后,讀取數組中的第二個(索引為1)JSONObject:

JSONObject o = array.getJSONObject(1);

最后,您從JSONObject讀取了iban:

String secondIban = o.getString("iban");
System.out.println(secondIban);

當然,所有這些都用try / catch來捕獲JSONException

try {
    JSONArray array = new JSONArray(json);
    JSONObject o = array.getJSONObject(1);
    String secondIban = o.getString("iban");
    System.out.println(secondIban);
}catch(JSONException jse){
    jse.printStackTrace();
}

注意

如果要知道iban字段不存在,請使用o.getString("iban") 如果該字段丟失,則將拋出JSONException。

如果可以將空字符串""作為最終丟失的字段的默認值,則可以使用o.optString("iban")來讀取該字段。

您可以執行以下操作。

    public static void main(String[] args) {
    String json = "[{\n" +
            "  \"id\" : \"572add95e4b0b04f4d502a3c\",\n" +
            "  \"amount\" : 109.27,\n" +
            "  \"sourceCurrency\" : \"MXN\",\n" +
            "  \"targetCurrency\" : \"USD\",\n" +
            "  \"recipientBankId\" : \"572add95e4b0b04f4d502a37\",\n" +
            "  \"iban\" : \"5805742027\",\n" +
            "  \"created\" : \"2016-05-05T05:43:49.194\"\n" +
            "}, {\n" +
            "  \"id\" : \"572add95e4b0b04f4d502a3e\",\n" +
            "  \"amount\" : 722.41,\n" +
            "  \"sourceCurrency\" : \"GBP\",\n" +
            "  \"targetCurrency\" : \"INR\",\n" +
            "  \"recipientBankId\" : \"572add95e4b0b04f4d502a32\",\n" +
            "  \"iban\" : \"4688276585\",\n" +
            "  \"created\" : \"2016-05-05T05:43:49.2\"\n" +
            "}]";
    JSONArray objects = new JSONArray(json);
    System.out.println(((JSONObject)objects.get(1)).get("iban"));

}

使用optString代替getString

optString如果在JSON中找不到元素/關鍵字,將返回空白字符串。

getString將引發異常。

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
================================
public static void main(String[] args) throws JSONException {
    String str = "[{\"id\":\"572add95e4b0b04f4d502a3c\",\"amount\":109.27,\"sourceCurrency\":\"MXN\",\"targetCurrency\":\"USD\",\"recipientBankId\":\"572add95e4b0b04f4d502a37\",\"iban\":\"5805742027\",\"created\":\"2016-05-05T05:43:49.194\"},{\"id\":\"572add95e4b0b04f4d502a3e\",\"amount\":722.41,\"sourceCurrency\":\"GBP\",\"targetCurrency\":\"INR\",\"recipientBankId\":\"572add95e4b0b04f4d502a32\",\"iban\":\"4688276585\",\"created\":\"2016-05-05T05:43:49.2\"}]";
    JSONArray jsonArray = new JSONArray(str);
    for (int i = 0; i < jsonArray.length(); i++) {
        JSONObject jsonObject = jsonArray.optJSONObject(i);
        /* optString - will return blank string if element not found */
        String iban = jsonObject.optString("iban");
        System.out.println(iban);
    }
}

您應該做的就是將字符串轉換為json:

public JsonObject parseJsonString(String jsonString) {
    JsonParser jsonParser = new JsonParser();
    JsonObject jsonObject = (JsonObject) jsonParser.parse(jsonString);
    return jsonObject;
}

然后提取您需要的值:

final String iban = jsonObject.get("iban").getAsString();

要從JSON讀取值,您只能使用以下方法:

  1. 數據綁定
  2. 樹模型
  3. 流API
  4. 像XPath

哪種方法取決於您,因為所有方法都有優點和缺點。

引擎:

我猜您只想從json中選擇一部分,因此xpath like可能是您使用$[1].iban (JsonPath)這樣的語法的選擇

暫無
暫無

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

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