从arraylist android创建json数组

时间:2013-06-19 17:43:40

标签: php android json

我已经玩了一会儿,我正在寻找一些帮助。我有一个ArrayList,我转变为JSONArray,然后放在JSONObject内。问题是我的格式。请允许我告诉你。

我获取了ArrayList的值并添加它们(小代码段)

if (v instanceof EditText) {
        String answer = ((EditText) v).getText().toString();
        if (answer.equals("")) {
        error.setText(v.getTag().toString()
            + " Needs an answer");
        ((EditText) v).setHint("Fill me out!");
        ((EditText) v).setHintTextColor(getResources()
            .getColor(R.color.red_bg));
        } else {
            error.setText("");
        }
        String question = v.getTag().toString();
        String combo = question + ": " + answer;
        myList.add(combo);
        Log.v("INFO", "Storing: " + combo);
}

这样可行,但添加":"是我的问题的开始。日志打印出来

06-19 12:13:33.630: V/INFO(3272): Storing: Height: 6`4

现在,当我创建要发送的JSON时,我使用以下

if (error.getText().toString().equals("")) {
    JSONObject json = new JSONObject();
    JSONArray jArray = new JSONArray(myList);
    try {
       json.putOpt("array", jArray);
    } catch (JSONException e) {
       e.printStackTrace();
    }

再次,这是有效的。现在问题清楚地说明了,它打印出这样的JSON

{
  "array":
  [
    "Store #: 00608",
    "Phone #: null",
    "Address: 3014 N. SCOTTSDALE RD.",
    "City: SCOTTSDALE",
    "Zip: 85251",
    "State: AZ",
    "Height: 6`4",
    "Weight: 230",
    "Ethnicity: White",
    "Age: 23",
    "Eye Color: Blue",
    "Favorite Food: Thai",
    "Comments: awesome"
   ]
}

如果你熟悉JSON,你知道我已经在这里搞砸了。我只是想把问题和答案放在一起。但是通过添加":"在中间看起来我试图将问题用作key并回答为value(种类)。无论如何,这看起来像是合法的JSON,而且它确实如此,但它并不像我需要的那样工作。

我的问题是,我应该做出问题" key和"答案" value

如果是这样,我将如何创建JSONArray,以便JSON看起来像这样

{
  "array":
  [
    "Store #" :  "00608",
    "Phone #" : "null",
    "Address" : "3014 N. SCOTTSDALE RD.",
    "City" : "SCOTTSDALE",
    "Zip" : "85251",
    "State" : "AZ",
    "Height" : "6`4",
    "Weight" : "230",
    ....
   ]
}

这样一个简单的

var_dump(json_decode($json));
var_dump(json_decode($json, true));
PHP中的

将为我提供我需要服务器端的数据。

或者在我解析服务器端时,保持这种格式并拆分字符串会更简单吗?无论您选择哪种答案,请提供几行代码来说明您的答案。你可以告诉我,我是一个视觉人。

感谢您的帮助,我希望这对未来的其他人也有帮助!

3 个答案:

答案 0 :(得分:1)

我不确定您是否可以在JSON中执行以下操作

[ "key":"value, ...."].

您可以使用键值对象对进行操作,如

[ {"key":"value"},...]

如果使用对象执行此操作,则必须为每对创建一个新对象,因为JSON中的键与实例变量的名称相对应,所以它可能会变得非常复杂。

我的建议是按现在的方式保留它并拆分字符串。我不熟悉PHP,但它应该像循环JSON数组一样简单,并在字符串上调用split(':')。

答案 1 :(得分:1)

您可以使用动态键创建JSONObject,如下所示:

{
    "Store #" :  "00608",
    "Phone #" : "null",
    "Address" : "3014 N. SCOTTSDALE RD.",
    "City" : "SCOTTSDALE",
    "Zip" : "85251",
    "State" : "AZ",
    "Height" : "6`4",
    "Weight" : "230",
    ....
}

更简单的问题,只能由您自己回答,显然您实现了应用程序和服务器部分。所以最适合你的是正确的方法。 性能方面,在一侧连接字符串并在另一侧分割它们并不是最好的,但它还取决于数组中有多少条目。

答案 2 :(得分:1)

你可以通过多种方式解决这个问题。如果你想保持格式化的方式,你只需要先处理你的字符串。当您从ArrayList获取值时,只需将组合拆分为部分

int splitPoint = combo.indexOf(":")
String key = combo.substring(0, splitPoint);
String value = combo.substring(splitPoint + 1);

分割键和值后,只需创建一个新的JSONObject并将键和值添加为字符串

JSONObject jObject = new JSONObject();
jObject.put(key, value);

这会将JSONString添加到自己的JSONObject中。然后,您可以将此对象添加到要创建的JSONArray

JSONArray jArray = new JSONArray();
jArray.puJSONObject(jObject);

我将其分解为部分,但是如果你只是将你的JSONArray ouside转换为for循环或其他迭代器并循环遍历ArrayList,则处理每个组合字符串并将生成的对象添加到JSONArray你可以实现理想的结果