2015-10-30 4 views
0

Есть ли способ сопоставления вложенного json-объекта в один класс Java? , например, у меня есть эта строка: JSonПользовательское сопоставление с GSon

{ 
    "order_id": 104, 
    "order_details" : [ 
    { 
     "name": "Product#1", 
     "price": { 
     "usd": 12.95 
     } 
    } 
    ] 
} 

Я хочу сопоставить с этим классом:

public class Order{ 
    Int id; // rename 
    String name; //map with order_details.name 
    float price; //map with order_details.price.usd 
} 

* UPDATE: Извините за неясным вопрос. Я разработчик как для Objective-C, так и для Java. Когда я работаю с JSONModel в ObjC, это легко конфиг отображение так: https://github.com/icanzilb/JSONModel#key-mapping

Ненавижу для разбора JSON вручную с помощью getJSONObject(), getString() ... Я найти способ настроить для автоматического разбора с Gson для Java ,

+2

Возможный дубликат [JSON синтаксического анализа с использованием Gson для java] (http://stackoverflow.com/questions/5490789/json-parsing-using-gson-fo r-java) – ThomasThiebaud

+0

Что вы пробовали? Есть много примеров на SO или google ... – ThomasThiebaud

ответ

0

Ofcourse. Вы можете сделать это, используя библиотеку GSON. Вам нужно собрать 2 pojo, а тот, который находится снаружи, может иметь пользовательскую модель.

0

Вы можете попробовать изменить свою модель, как это:

public class Order { 

    int id; // rename 
    String name; //map with order_details.name 
    float price; //map with order_details.price.usd 

    public void parce(String json) { 
     try { 
      JSONObject jsonObject = new JSONObject(json); 
      id = jsonObject.getInt("order_id"); 
      name = jsonObject.getJSONArray("order_details").getJSONObject(0).getString("name"); 
      price = (float) jsonObject.getJSONArray("order_details").getJSONObject(0).getJSONObject("price").getDouble("usd"); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Пример использования этого кода:

Order order = new Order(); 
order.parce("{\"order_id\":104,\"order_details\":[{\"name\":\"Product#1\",\"price\":{\"usd\":12.95}}]}"); 

Результат:

Result

+0

Ваше решение кажется, не использует Gson для Java? –

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