2015-11-16 5 views
1

У меня есть корм JSON, где мне нужно, чтобы извлечь «продукт» из него информацию, как показано ниже: ОБНОВЛЕНОИзвлечение данных из JSON объекта - Android

{ 
    "category-key": "guvera-music", 
    "category-localized-title": "Guvera music", 
    "items": [ 
     { 
      "type": "product", 
      "product": { 
       "engine-product-id": "com.guvera.nonrenewing.day", 
       "localization-key": "guvera-1-day-pass", 
       "type": "music.subscription", 
       "localized-description": "Guvera 1 day pass", 
       "category-key": "guvera-music", 
       "denomination-currency": "IDR", 
       "currency": "IDR", 
       "product-promotion-message": "", 
       "denomination-amount": 3000, 
       "parent-category-id": null, 
       "merchant": "Guvera", 
       "price": 3300, 
       "product-id": 1, 
       "product-image-id": 19, 
       "srp": 3300 
      } 
     }, 
     { 
      "type": "product", 
      "product": { 
       "engine-product-id": "com.guvera.nonrenewing.week", 
       "localization-key": "guvera-1-week-pass", 
       "type": "music.subscription", 
       "localized-description": "Guvera 1 week pass", 
       "category-key": "guvera-music", 
       "denomination-currency": "IDR", 
       "currency": "IDR", 
       "product-promotion-message": "", 
       "denomination-amount": 20000, 
       "parent-category-id": null, 
       "merchant": "Guvera", 
       "price": 22000, 
       "product-id": 2, 
       "product-image-id": 19, 
       "srp": 22000 
      } 
     }, 
     { 
      "type": "product", 
      "product": { 
       "engine-product-id": "com.guvera.nonrenewing.month", 
       "localization-key": "guvera-1-month-pass", 
       "type": "music.subscription", 
       "localized-description": "Guvera 1 month pass", 
       "category-key": "guvera-music", 
       "denomination-currency": "IDR", 
       "currency": "IDR", 
       "product-promotion-message": "", 
       "denomination-amount": 55000, 
       "parent-category-id": null, 
       "merchant": "Guvera", 
       "price": 60500, 
       "product-id": 3, 
       "product-image-id": 19, 
       "srp": 60500 
      } 
     }, 
     { 
      "type": "product", 
      "product": { 
       "engine-product-id": "com.guvera.nonrenewing.trimester", 
       "localization-key": "guvera-3-month-pass", 
       "type": "music.subscription", 
       "localized-description": "Guvera 3 month pass", 
       "category-key": "guvera-music", 
       "denomination-currency": "IDR", 
       "currency": "IDR", 
       "product-promotion-message": "", 
       "denomination-amount": 165000, 
       "parent-category-id": null, 
       "merchant": "Guvera", 
       "price": 181500, 
       "product-id": 4, 
       "product-image-id": 19, 
       "srp": 181500 
      } 
     }, 
     { 
      "type": "product", 
      "product": { 
       "engine-product-id": "com.guvera.nonrenewing.semester", 
       "localization-key": "guvera-6-month-pass", 
       "type": "music.subscription", 
       "localized-description": "Guvera 6 month pass", 
       "category-key": "guvera-music", 
       "denomination-currency": "IDR", 
       "currency": "IDR", 
       "product-promotion-message": "", 
       "denomination-amount": 303600, 
       "parent-category-id": null, 
       "merchant": "Guvera", 
       "price": 333960, 
       "product-id": 5, 
       "product-image-id": 19, 
       "srp": 333960 
      } 
     }, 
     { 
      "type": "product", 
      "product": { 
       "engine-product-id": "com.guvera.nonrenewing.year", 
       "localization-key": "guvera-12-month-pass", 
       "type": "music.subscription", 
       "localized-description": "Guvera 12 month pass", 
       "category-key": "guvera-music", 
       "denomination-currency": "IDR", 
       "currency": "IDR", 
       "product-promotion-message": "", 
       "denomination-amount": 547800, 
       "parent-category-id": null, 
       "merchant": "Guvera", 
       "price": 602580, 
       "product-id": 6, 
       "product-image-id": 19, 
       "srp": 602580 
      } 
     } 
    ] 
} 

Я пытаюсь использовать следующий код но мой код не работает, так что я могу получить «продукт»:

  try { 
      JSONArray jsonProductArray = response.getJSONArray("items"); 

      // Parse through 
      for (int i = 0; i < jsonProductArray.length(); i++) { 
      // Is the code below correct so that I can get "product"? 
       JSONObject products = jsonProductArray.getJSONObject(i).getJSONObject("product"); 
      } 

это JSON структура массив с объектами внутри? Или, вернее, один объект, содержащий массив с 6 элементами? Как я могу изолировать «продукт» от кода выше? Любая подробная информация о том, как решить эту проблему, была бы весьма признательна.

+2

Является ли содержание ваших информаций ваш ответ? потому что это не совсем JSON – Virthuss

+2

Недействительный JSON String, если JSON создан вами, а затем передайте код, из которого вы создаете выложенную строку JSON –

+0

, то, что вы написали здесь, является ответом, который появляется в клиентской программе HTTP, читаемые человеком данные, но вы также должны получить ответ в сыром виде, скопируйте это, raw является фактическим. JSON –

ответ

0

JSON, который вы вставили выше, не является действительным JSON.

Чтобы проверить правильность вашего JSON или нет, вы можете использовать JSONLint.

Является ли это структурой JSON массивом с объектами внутри? Или, вернее, один объект, содержащий массив с 6 элементами?

Пожалуйста, обратите внимание, что если у вас есть массив JSON ваш JSON начинается с [ и заканчивается ] т.е. квадратных скобок. Внутри вы можете иметь объекты JSON. Если у вас есть объект JSON, он начнется с { и заканчивается } i.e. Кудрявые скобки.

UPDATE:

После обновленный вопрос, то JSON является действительным. Теперь я предполагаю, что вы хотите объект JSON product, для этого вы должны увидеть, что он находится внутри массива JSON items.

Так что вы должны сделать что-то вроде этого:

JSONArray jsonProductArray = response.getJSONArray("items"); 

JSONObject productObject=jsonProductArray.getJSONObject(2); 

Чтобы получить объекты внутри product

productObject.get("nameOfObject"); 

Надеется, что это помогает. :)

0
try { 
JSONArray jsonProductArray = response.getJSONArray("items"); 

// Parse through 
for (int i = 0; i < jsonProductArray.length(); i++) { 
// Is the code below correct so that I can get "product"? 
JSONObject products = jsonProductArray.getJSONObject(i).getJSONObject(1).getString("engine-product-id"); 
     } 
+0

Попробуйте этот код и сообщите мне свой отзыв об этом :) –

0

Прежде всего, вам нужно получить JSONObject на корень смотрите ниже.

JSONObject j = new JSONObject(json); 

Вот JSON ваш json файл или Строка, которую нужно разобрать.

После этого вам необходимо получить JSONArray по имени items, как показано ниже.

JSONArray a = j.getJSONArray("items"); 

Затем пройдите выше JSONArray, как показано ниже.

for(int i = 0; i < a.length(); i++){ 
    // Here you need to get JSONObject from JSONArray at Index i. 
    JSONOject jj = a.getJSONObject(i); 
    //Now you need to get product JSONObject 
    JSONObject jsonObj = jj.getJSONObject("product"); 
    //From jsonObj you get all information about product. 
} 
0

Gson библиотека Пример для получения выше JSon строки,

вам потребуется только одну строку, чтобы получить все данные JSon заселенных в вашем объекте, который

 Response response = (new Gson()).fromJson("your_json_String", Response.class); 

для этой линии работы добавьте **gson** в свой проект и добавьте следующие классы:

Первый раз сделать Product.java

import com.google.gson.annotations.SerializedName; 

public class Product { 

    @SerializedName("engine-product-id") 
    private String engine_product_id; 

    @SerializedName("localization-key") 
    private String localization_key; 

    @SerializedName("type") 
    private String type; 

    @SerializedName("localized-description") 
    private String localized_description; 

    @SerializedName("category-key") 
    private String category_key; 

    @SerializedName("denomination-currency") 
    private String denomination_currency; 

    @SerializedName("currency") 
    private String currency; 

    @SerializedName("product-promotion-message") 
    private String product_promotion_message; 

    @SerializedName("denomination-amount") 
    private String denomination_amount; 

    @SerializedName("parent-category-id") 
    private String parent_category_id; 

    @SerializedName("merchant") 
    private String merchant; 

    @SerializedName("price") 
    private String price; 

    @SerializedName("product-id") 
    private String product_id; 

    @SerializedName("product-image-id") 
    private String product_image_id; 

    @SerializedName("srp") 
    private String srp; 

    public String getEngine_product_id() { 
     return engine_product_id; 
    } 

    public void setEngine_product_id(String engine_product_id) { 
     this.engine_product_id = engine_product_id; 
    } 

    public String getLocalization_key() { 
     return localization_key; 
    } 

    public void setLocalization_key(String localization_key) { 
     this.localization_key = localization_key; 
    } 

    public String getType() { 
     return type; 
    } 

    public void setType(String type) { 
     this.type = type; 
    } 

    public String getLocalized_description() { 
     return localized_description; 
    } 

    public void setLocalized_description(String localized_description) { 
     this.localized_description = localized_description; 
    } 

    public String getCategory_key() { 
     return category_key; 
    } 

    public void setCategory_key(String category_key) { 
     this.category_key = category_key; 
    } 

    public String getDenomination_currency() { 
     return denomination_currency; 
    } 

    public void setDenomination_currency(String denomination_currency) { 
     this.denomination_currency = denomination_currency; 
    } 

    public String getCurrency() { 
     return currency; 
    } 

    public void setCurrency(String currency) { 
     this.currency = currency; 
    } 

    public String getProduct_promotion_message() { 
     return product_promotion_message; 
    } 

    public void setProduct_promotion_message(String product_promotion_message) { 
     this.product_promotion_message = product_promotion_message; 
    } 

    public String getDenomination_amount() { 
     return denomination_amount; 
    } 

    public void setDenomination_amount(String denomination_amount) { 
     this.denomination_amount = denomination_amount; 
    } 

    public String getParent_category_id() { 
     return parent_category_id; 
    } 

    public void setParent_category_id(String parent_category_id) { 
     this.parent_category_id = parent_category_id; 
    } 

    public String getMerchant() { 
     return merchant; 
    } 

    public void setMerchant(String merchant) { 
     this.merchant = merchant; 
    } 

    public String getPrice() { 
     return price; 
    } 

    public void setPrice(String price) { 
     this.price = price; 
    } 

    public String getProduct_id() { 
     return product_id; 
    } 

    public void setProduct_id(String product_id) { 
     this.product_id = product_id; 
    } 

    public String getProduct_image_id() { 
     return product_image_id; 
    } 

    public void setProduct_image_id(String product_image_id) { 
     this.product_image_id = product_image_id; 
    } 

    public String getSrp() { 
     return srp; 
    } 

    public void setSrp(String srp) { 
     this.srp = srp; 
    } 
} 

Теперь сделайте Item.java

import com.google.gson.annotations.SerializedName; 

public class Item { 

    @SerializedName("type") 
    private String type; 

    @SerializedName("product") 
    private String product; 

    public String getType() { 
     return type; 
    } 

    public void setType(String type) { 
     this.type = type; 
    } 

    public String getProduct() { 
     return product; 
    } 

    public void setProduct(String product) { 
     this.product = product; 
    } 
} 

Наконец сделать Response.java

import java.util.ArrayList; 

import com.google.gson.annotations.SerializedName; 

public class Response { 

    @SerializedName("category-key") 
    private String category_key; 

    @SerializedName("category-localized-title") 
    private String category_localized_title; 

    @SerializedName("type") 
    private ArrayList<Item> type; 

    public String getCategory_key() { 
     return category_key; 
    } 

    public void setCategory_key(String category_key) { 
     this.category_key = category_key; 
    } 

    public String getCategory_localized_title() { 
     return category_localized_title; 
    } 

    public void setCategory_localized_title(String category_localized_title) { 
     this.category_localized_title = category_localized_title; 
    } 

    public ArrayList<Item> getType() { 
     return type; 
    } 

    public void setType(ArrayList<Item> type) { 
     this.type = type; 
    } 
} 
Смежные вопросы