【问题标题】:creating json array from arraylist android从arraylist android创建json数组
【发布时间】:2013-06-19 17:43:40
【问题描述】:

我一直在玩弄这个,我正在寻求帮助。我有一个ArrayList,我将其转换为JSONArray,然后放入JSONObject。问题是我的格式。请允许我给你看。

我得到 ArrayList 的值并像这样添加它们(小代码 sn-p)

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 会为我提供服务器端所需的数据。

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

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

【问题讨论】:

    标签: php android json


    【解决方案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,处理每个组合字符串并将结果对象添加到 JSONArray 您可以达到预期的效果

    【讨论】:

    • 我认为这是最完整的答案,所以我接受它。我决定保留格式并拆分字符串服务器端。我将简单地通过一个数组运行一个 for 循环并将值放在我需要的地方。谢谢!
    【解决方案2】:

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

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

    您可以使用键值对象对来实现,如

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

    如果您使用对象来执行此操作,则必须为每一对创建一个新对象,并且可能会变得相当复杂,因为 JSON 中的键对应于实例变量的名称。

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

    【讨论】:

    • 你是对的,这就是我需要这样做的方式。我必须将每个问题和答案放入它自己的对象中,然后将其填充到数组中,然后将其填充到对象中,然后……是的。复杂。以我拥有它的方式并将其拆分为服务器端会更容易
    【解决方案3】:

    您可以像这样使用动态键创建 JSONObject:

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

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

    【讨论】:

      猜你喜欢
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      • 1970-01-01
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多