Разбор JSON для Android из-за ошибки google-shopping-api - PullRequest
0 голосов
/ 21 февраля 2012

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

После долгих поисков я смог получить информацию о продукте для товара.!Тем не менее, я не могу ограничиться только строкой в ​​продукте.Так, например, я хочу просто получить название продукта.

У меня есть следующее:

jsonString:

{
 "kind": "shopping#products",
 "etag": "\"GKsxsRlaBDslDpMe-MT1O7wqUDE/dMvQ5Pu2C806fWZJbNJ0GjdesJs\"",
 "id": "tag:google.com,2010:shopping/products",
 "selfLink": "https://www.googleapis.com/shopping/search/v1/public/products?country=US&restrictBy=gtin:051500240908&startIndex=1&maxResults=25",
 "totalItems": 3,
 "startIndex": 1,
 "itemsPerPage": 25,
 "currentItemCount": 3,
 "items": [
  {
   "kind": "shopping#product",
   "id": "tag:google.com,2010:shopping/products/7585088/9884865157760252836",
   "selfLink": "https://www.googleapis.com/shopping/search/v1/public/products/7585088/gid/9884865157760252836",
   "product": {
    "googleId": "9884865157760252836",
    "author": {
     "name": "Southeastern Delivery",
     "accountId": "7585088"
    },
    "creationTime": "2011-07-25T00:15:58.000Z",
    "modificationTime": "2012-02-11T09:29:00.000Z",
    "country": "US",
    "language": "en",
    "title": "Jif Peanut Butter, Creamy",
    "description": "Jif Creamy Peanut Butter. Fresh Roasted Peanut Taste. Look for the flavor seal. Contains no preservatives. No refrigeration required.",
    "link": "http://www.southeasterndelivery.com/Jif_Peanut_Butter_00051500240908/",
    "brand": "Jif Peanut Butter",
    "condition": "new",
    "gtin": "00051500240908",
    "gtins": [
     "00051500240908"
    ],
    "inventories": [
     {
      "channel": "online",
      "availability": "inStock",
      "price": 15.64,
      "shipping": 1.56,
      "currency": "USD"
     }
    ],
    "images": [
     {
      "link": "http://www.southeasterndelivery.com/images/ProductImages/00051500240908.jpg"
     }
    ]
   }
  },
 ],
 "requestId": "0CLGzkcKVo64CFRDd5wod4mMAAA"
 }

У меня есть следующий код в моем Androidприложение для его разбора:

try {

    JSONObject jsonObject = new JSONObject(jsonString);
    JSONArray itemsArray = jsonObject.getJSONArray("items");
    JSONObject productObject = itemsArray.getJSONObject(0);
    //String productTitle = productObject.getString("title");
    //tv.setText(productTitle);
    tv.setText(productObject.toString());
} catch (JSONException e) {
    // TODO Auto-generated catch block
    tv.setText("JSONOBJECT Error: " + e);
    e.printStackTrace();
}
setContentView(tv);

Теперь текстовое представление в моем приложении для Android будет отображаться (очевидно, не с отступом, я сделал это для удобства чтения):

   "product": {
    "googleId": "9884865157760252836",
    "author": {
     "name": "Southeastern Delivery",
     "accountId": "7585088"
    },
    "creationTime": "2011-07-25T00:15:58.000Z",
    "modificationTime": "2012-02-11T09:29:00.000Z",
    "country": "US",
    "language": "en",
    "title": "Jif Peanut Butter, Creamy",
    "description": "Jif Creamy Peanut Butter. Fresh Roasted Peanut Taste. Look for the flavor seal. Contains no preservatives. No refrigeration required.",
    "link": "http://www.southeasterndelivery.com/Jif_Peanut_Butter_00051500240908/",
    "brand": "Jif Peanut Butter",
    "condition": "new",
    "gtin": "00051500240908",
    "gtins": [
     "00051500240908"
    ],
    "inventories": [
     {
      "channel": "online",
      "availability": "inStock",
      "price": 15.64,
      "shipping": 1.56,
      "currency": "USD"
     }
    ],
    "images": [
     {
      "link": "http://www.southeasterndelivery.com/images/ProductImages/00051500240908.jpg"
     }
    ]
   }

Теперь, если вы заметили в моемJava-код У меня есть две закомментированные строки.Если я раскомментирую эти строки, а затем закомментирую строку:

tv.setText(productObject.toString());

tv будет установлен на эту ошибку: «Ошибка JSONOBJECT: org.json.JSONEception: Нет значения для заголовка».Я не уверен, почему это так, потому что, очевидно, это заголовок в productObject.

Любая помощь будет отличной!

Ответы [ 2 ]

2 голосов
/ 21 февраля 2012

Я использую json-smart в моем проекте. Это очень маленький и очень быстрый. Чтобы преобразовать ваш JSON из Sting в реальный объект, используйте JSONObjet json = (JSONObject)JSONValue.parse(rawString);

Когда у вас есть JSONObject, вы рассматриваете его как карту. Итак String title = (String) json.get("title")

0 голосов
/ 22 февраля 2012

Вам не хватает уровня информации в вашем коде.Массив JSON содержит items , который содержит products , которые имеют title .

Ваш код должен выглядеть следующим образом:

JSONObject jsonObject = new JSONObject(jsonString); 
JSONArray itemsArray = jsonObject.getJSONArray("items"); 
JSONObject itemObject = itemsArray.getJSONObject(0); 
JSONObject productObject = itemObject.getJSONObject("product");
String productTitle = productObject.getString("title");
...