2017-02-09 3 views
1

У меня есть следующие JSONJSON массива на объекты в список Строки

[{ 
    "rowId": "03 EUR10580000" 
}, { 
    "rowId": "03 EUR10900001" 
}, { 
    "rowId": "03 EUR1053RUD*" 
}, { 
    "rowId": "033331" 
}] 

, и я хотел бы, чтобы преобразовать его в Список строку только с значениями RowId, поэтому в данном случае, как

"03 EUR10580000" 
"03 EUR10900001" 
"03 EUR1053RUD*" 
"033331" 

Я сделал это с Gson fromJson, но взамен я получаю список LinkedTreeMap, и когда я делаю цикл в fail. Я бы хотел вместо этого простой список строк.

+1

Что не получается? Можете ли вы показать нам код, который вы используете для итерации? Вы можете легко использовать метод 'values ​​()' 'LinkedTreeMap', который возвращает' Collection'. Или вы можете перебирать записи, сопоставлять их со значениями и собирать их (используя, например, lamba). – Philipp

+0

Пожалуйста, напишите код того, что вы делаете с Gson. С Джексоном это очень просто, и я уверен, что это тоже должно быть с Гсеном. –

ответ

3

Ну, ваша строка не является json из «списка строк». Он содержит список объектов. поэтому вы можете создать класс с rowID как свойство строки.

класс данных

  • RowId (тип строки)

Затем вы можете использовать Gson разобрать этот JSON строку в список < Data>, используемый here

или вы должны подготовить новый json-парсер вручную.

1

Написать класс POJO как

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class RootObject { 

    @SerializedName("rowId") 
    @Expose 
    private String rowId; 

    public String getRowId() { 
     return rowId; 
    } 

    public void setRowId(String rowId) { 
     this.rowId = rowId; 
    } 

} 

Тогда просто создать List<RootObject> и получить значения из POJO.

+0

Вопрос говорит, что он уже использует Gson –

+0

Sry ... did not see ...Я сделал это редактирование – Akshay

2

Если вы просто хотите, чтобы разобрать вашу строку быстро, используя Gson, вы можете просто создать конструктор и использовать «по умолчанию» List и Map экземпляров, используемых для представления вашего JSON в Java. Если вы хотите быть более безопасным по типу или хотите использовать разборные экземпляры в «более крупном» проекте, я бы предложил создать POJO, как описано в других ответах.

final GsonBuilder gsonBuilder = new GsonBuilder(); 

// you may want to configure the builder 

final Gson gson = gsonBuilder.create(); 

/* 
* The following only works if you are sure that your JSON looks 
* as described, otherwise List<Object> may be better and a validation, 
* within the iteration. 
*/ 
@SuppressWarnings("unchecked") 
final List<Map<String, String>> list = gson.fromJson("[{ ... }]", List.class); 

final List<String> stringList = list.stream() 
      .map(m -> m.get("rowId")) 
      .collect(Collectors.toList()); 

System.out.println(stringList); 
+0

Вы можете использовать 'TypeToken' с вашим списком типа' final Type type = new TypeToken >() {}. GetType(); ', чтобы убедиться, что у вас есть правильные объекты в вашем списке и/или 'builder.enableComplexMapKeySerialization(). create();' –

0

У вас есть:

String str = "[{\"rowId\":\"03 EUR10580000\"},{\"rowId\":\"03 EUR10900001\"},{\"rowId\":\"03 EUR1053RUD*\"},{\"rowId\":\"033331\"}]" 

Вы можете сделать что-то подобное (нет необходимости в какой-либо внешней библиотеки, как gson):

str = str.replace("{\"rowId\":\"","").replace("\"}","").replace("[","").replace("]",""); 
List<String> rowIDs = str.split(","); 

Если строка форматирования JSON, вы можете также trim() каждая из строк в rowIDs

0

Вам необходимо разобрать строку json как JsonArray. Затем перебираем экземпляр JsonArray и добавляем каждый элемент json в список ls. Follwoing code sinppet - это решение:

List<String> ls = new ArrayList<String>(); 
    String json = "[{\"rowId\":\"03 EUR10580000\"},{\"rowId\":\"03 EUR10900001\"},{\"rowId\":\"03 EUR1053RUD*\"},{\"rowId\":\"033331\"}]"; 
    JsonArray ja = new JsonParser().parse(json).getAsJsonArray(); 

    for(int i = 0; i < ja.size(); i++) { 
     ls.add(ja.get(i).getAsJsonObject().get("rowId").toString()); 
    } 
    for(String rowId : ls) { 
     System.out.println(rowId); 
    } 
    /* output : 
    "03 EUR10580000" 
    "03 EUR10900001" 
    "03 EUR1053RUD*" 
    "033331" */ 
Смежные вопросы