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 个对象的经销商,而是作为具有 1 个包含 9 个对象的对象的经销商返回。当然,当我将它发送到 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();
        }

我有一个相当广泛的 JSONArray 要发送到 API,并且创建的 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 回答
0

您正在使用以下代码创建一个数组:

JSONArray dealerJSON = new JSONArray();

所以不要那样做。

只需这样做:

emailDataObject.put("Dealer", dealer);

您不需要dealerJSON 步骤,因为dealer 是您想要的JSONObject。

于 2014-01-19T08:56:12.710 回答