我已经玩了一会儿,我正在寻找一些帮助。我有一个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
中的将为我提供我需要服务器端的数据。
或者在我解析服务器端时,保持这种格式并拆分字符串会更简单吗?无论您选择哪种答案,请提供几行代码来说明您的答案。你可以告诉我,我是一个视觉人。
感谢您的帮助,我希望这对未来的其他人也有帮助!
答案 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
你可以实现理想的结果