2016-05-05 5 views
0

Я видел много примеров, но ни один из них не похож на то, что я хочу.Доступ к элементам массива 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 значения.

Как я могу это сделать?

ответ

0

вы можете сделать что-то вроде ниже.

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")); 

} 
1

С содержимым 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" + 
       "}]"; 

Сначала необходимо получить JSONArray от вашего содержания JSon:

JSONArray array = new JSONArray(json); 

Тогда вы читали второй (по индексу 1) JSONObject в массив:

JSONObject o = array.getJSONObject(1); 

И наконец, вы читали IBAN из JSONObject:

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

С, конечно, все это окружено TRY/улова поймать 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"). Исключение JSON будет выбрано, если поле отсутствует.

Если вы можете работать с пустой строкой "" в качестве значения по умолчанию для поля, которое в конечном итоге отсутствует, используйте o.optString("iban"), чтобы прочитать это поле.

0

Использовать 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); 
    } 
} 
0

Что вы должны сделать, это преобразовать строку в 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(); 
0

Чтобы прочитать значение из JSON можно только с следующие методы:

  1. Связывание данных
  2. модель дерева
  3. Streaming API
  4. XPath как

Какой метод использовать до вас, потому что все методы имеют преимущества и недостатки.

Двигатели:

  • Fastjson поддерживает привязку данных, XPath, как
  • Gson поддерживает привязку данных, модель дерева, Streaming API
  • Jackson поддерживает привязку данных, модель дерева, Streaming API
  • JsonPath поддержка s XPath как
  • Genson поддерживает привязку данных, дерева модели с JSONP, Streaming API
  • Ig json parser поддерживает привязки данных
  • Moshi поддерживает BIND Data
  • JSON java поддерживает модель дерева
  • LoganSquare поддерживает данных связываются

Я предполагаю, что вы хотите, чтобы выбрать только часть из JSON, так как XPath может быть ваш выбор с синтаксисом этой $[1].iban (JsonPath)

Смежные вопросы