0

我一直在玩弄这个有一段时间,我正在寻找一些帮助。我有一个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你就知道我在这里搞砸了。我只是想把问题和答案放在一起。但是,通过将“:”添加到中间,看起来我正在尝试将问题用作 thekey并将答案用作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));

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

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

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

4

3 回答 3

1

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

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

您可以使用键值对象对来完成,如

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

如果你用对象做这件事,你将不得不为每一对创建一个新对象,而且它可能会变得相当复杂,因为 JSON 中的键对应于实例变量的名称。

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

于 2013-06-19T18:16:09.373 回答
1

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

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

更简单的问题只能由您自己回答,因为显然您实现了 App 和 Server 部分。所以最适合你的就是正确的方法。性能方面,在一侧连接字符串并在另一侧拆分它们并不是最好的,但这也取决于数组中有多少条目。

于 2013-06-19T18:51:58.873 回答
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一个 for 循环或其他一些迭代器并循环通过你的ArrayList,处理每个组合字符串并将结果对象添加到 aJSONArray中,你可以获得所需的结果

于 2013-06-19T18:57:13.430 回答