0

APIに送信する必要がある配列を作成しています。json の一部に連絡先情報があります。次のように送信する必要があります。

"Dealer" : { 
 "email" : "mjones@fake - domain.com" , 
 "firstName" : "Martin" , 
 "lastName" : "Jones" , 
 "phone" : " 5555554321 " , 
 "company" : "JonesCo Golf" , 
 "street" : "554 Elm Street" , 
 "city" : "Springfield" , 
 "stateProvince" : "Illinois" , 
 "postalCode" : "62701" 

 } 

私のjson(Log.dを使用する場合)は次のように表示されます:

"Dealer":
[
    {
        "email":"email@email.com",
        "firstName":"John",
        "lastName":"Doe",
        "phone":"0987654321",
        "company":"test",
        "street":"123 Street",
        "city":"myCity",
        "stateProvince":"Xy",
        "postalCode":"12345"
    }
]

9 つのオブジェクトを持つディーラーではなく、9 つのオブジェクトを含む 1 つのオブジェクトを持つディーラーとして返されます。もちろん、これを API に送信しても正しく解析されません。

共有設定からコンテンツを取得し、次のように JSONArray を作成して読み込みます。

JSONObject dealer = new JSONObject();
        try {
            dealer.put("email", salesPerson.get("emailAddress"));
            dealer.put("firstName", salesPerson.get("firstName"));
            dealer.put("lastName", salesPerson.get("lastName"));
            dealer.put("phone", salesPerson.get("mobilePhone"));
            dealer.put("street", salesPerson.get("mailingAddress1"));
            dealer.put("street2", salesPerson.get("mailingAddress2"));
            dealer.put("city", salesPerson.get("city"));
            dealer.put("stateProvince", salesPerson.get("state"));
            dealer.put("postalCode", salesPerson.get("postalCode"));
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Log.d("dealer", dealer.toString());
        JSONArray dealerJSON = new JSONArray();
        dealerJSON.put(dealer);
        try {
            emailDataObject.put("Dealer", dealerJSON);
        } catch (JSONException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        }

API に送信するかなり広範な JSONArray があり、JSON はエラーなしで作成されています。JSONObject を JSONArray に追加すると、どこにでも角括弧が追加されているようです。

追加の角括弧がjsonに追加されないようにするにはどうすればよいですか?

4

3 に答える 3

4

バッカーを避けるために、オブジェクトを配列に追加するのではなく、オブジェクトに直接追加してください。ここに例があります。

    JSONObject dealer = new JSONObject();
    try {
        dealer.put("email", salesPerson.get("emailAddress"));
        dealer.put("firstName", salesPerson.get("firstName"));
        dealer.put("lastName", salesPerson.get("lastName"));
        dealer.put("phone", salesPerson.get("mobilePhone"));
        dealer.put("street", salesPerson.get("mailingAddress1"));
        dealer.put("street2", salesPerson.get("mailingAddress2"));
        dealer.put("city", salesPerson.get("city"));
        dealer.put("stateProvince", salesPerson.get("state"));
        dealer.put("postalCode", salesPerson.get("postalCode"));
    } catch (JSONException e) {
        e.printStackTrace();
    }
    Log.d("dealer", dealer.toString());
    try {
        emailDataObject.put("Dealer", dealer);
    } catch (JSONException e2) {
        // TODO Auto-generated catch block
        e2.printStackTrace();
    }
于 2014-01-19T08:53:31.533 に答える
0

私は Android にはあまり興味がありませんが、いくつかの指示を与えることはできます。JSON について概念的に間違っていることは確かに言えます。

"Dealer":
    {
    "email":"email@email.com",
    "firstName":"John",
    "lastName":"Doe",
    "phone":"0987654321",
    "company":"test",
    "street":"123 Street",
    "city":"myCity",
    "stateProvince":"Xy",
    "postalCode":"12345"
    }

この最初の例は、JSON オブジェクトの配列ではなく、多くのプロパティを持つ単一のオブジェクトです

"Dealer":
    [
        {
        "email":"email@email.com",
        "firstName":"John",
        "lastName":"Doe",
        "phone":"0987654321",
        "company":"test",
        "street":"123 Street",
        "city":"myCity",
        "stateProvince":"Xy",
        "postalCode":"12345"
        }
    ]

代わりに、これは実際の JSON 配列であり、前のオブジェクトである単一の要素によって形成されます。

JSON オブジェクトに要素を追加することについて再考する必要があり、実際に期待される動作は何ですか


編集: この行は、不要な配列の作成に責任があると思います:

        JSONArray dealerJSON = new JSONArray();
于 2014-01-19T08:52:42.760 に答える