0

プレイストアから購入した後に受け取ったこの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 = ?? 等

ありがとう

4

1 に答える 1

1

Playストアから購入した後に受け取ったJSON文字列があります

それが本当に返ってきたものである場合は、彼らに連絡して、API を修正するように伝える必要があります。その文字列は有効な JSON ではありません。これには 2 つの問題があります。

  1. JSON ドキュメントには、最上位項目としてオブジェクトまたは配列が必要です。引用された文字列には{、先頭と}末尾の a がありません。

  2. JSON のすべてのキーは二重引用符で囲む必要があります。最初のものPurchaseInfoはそうではありません。

また、あなたのコードはこれを行っています:

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

...しかし、それ有効な JSON であればPurchaseInfo、配列ではなく、オブジェクトになります。

見てみるとPurchaseInfo:、先頭の を外せば有効です。それを削除したら、この行:

JSONObject j1 = new JSONObject(tester1);

...情報を照会できるオブジェクトを提供します。

String orderId = j1.getString("orderId");
于 2013-01-06T07:41:43.283 に答える