如何解析此JSON字符串以获取不同的字段

时间:2013-01-06 07:30:10

标签: android json parsing

我从Playstore购买后收到了这个JSON字符串,当我试图解析它时,我显然在代码中遗漏了一些东西。

PurchaseInfo:{"orderId":"12999763165555505758.1317333586444405",
    "packageName":"com.mypkgname.myapp",
    "productId":"monthly_purchase_01",
    "purchaseTime":1357456489000,
    "purchaseState":0,
    "purchaseToken":"yrynypfkdncvhlxdbypysvwz.AO-J1OxFkndfqkClAqbbYAOApkMgTG4VX9Ef0uNP0FIs9-xGrXivkbx3FNMA2yNU12K_sbvRGFcknVBTfisI-uZawCXLGlMX4v4Zw8GFOmS0Q6PIbiITTGqn5h1QbEB4Rv84sXdUJHP3B_UQfujZN7ADi9bm_N4_iA"}

以下是我用它来尝试解析的代码片段

       try {

            JSONObject j1 = new JSONObject(tester1);             
                JSONArray mPurchInfo = j1.getJSONArray("PurchaseInfo");          

                int count = mPurchInfo.length();

                final String[] purchInfo = new String[count];
            JSONObject q1 = mPurchInfo.getJSONObject(0);

            purchInfo[0] = q1.getString("orderId");
                    purchInfo[1] = q1.getString("packageName");
                purchInfo[2] = q1.getString("productId");
                purchInfo[3] = q1.getString("purchaseTime");
                purchInfo[4] = q1.getString("purchaseState");
            purchInfo[5] = q1.getString("purchaseToken");
                orderID=purchInfo[0];

          } catch (JSONException e) {
                Log.e("Error","Yes");
          }

我正在捕获错误,因为我在日志中看到这个最后一个日志语句,但我仍在尝试学习解析JSON字符串

我希望我至少接近 理想情况下,我希望将字符串设置为JSON字符串中的所有值

orderID = ?? packageName = ?? 等

由于

1 个答案:

答案 0 :(得分:1)

  

我从Playstore购买后收到了这个JSON字符串

如果那是真的你得到了什么,你需要联系他们并告诉他们修复他们的API;该字符串无效JSON。它有两个问题:

  1. JSON文档必须将对象或数组作为顶级项目。引用的字符串在开头缺少{,在结尾处缺少}

  2. JSON 中的所有键必须为双引号。第一个PurchaseInfo,不是。

  3. 此外,您的代码正在执行此操作:

    JSONArray mPurchInfo = j1.getJSONArray("PurchaseInfo"); 
    

    ...但如果有效的JSON,PurchaseInfo将不是一个数组,它就是一个对象。

    看一下,如果你在开头删除了PurchaseInfo:,它就是有效的。删除后,这一行:

    JSONObject j1 = new JSONObject(tester1);
    

    ...将为您提供一个可以查询信息的对象:

    String orderId = j1.getString("orderId");