Heim > Fragen und Antworten > Hauptteil
List<HashMap> reList = new ArrayList<HashMap>();
for(int i=0;i<bjdList.size();i++){
Zqwl_yd_jdxx bjd = bjdList.get(i);
HashMap temp = new HashMap();
temp.put("id",bjd.getId());
temp.put("yd_number",bjd.getYd_number());
temp.put("status",bjd.getStatus());
reList.add(temp);
}
str = JSONValue.toJSONString(reList);
response.getWriter().write(str);
我写后台的接口,ios的程序员说必须标注每一个值得类型(string int 。。。)Android的程序员就不用?转正json返回之后不都是字符串了吗?为什么还要标注出int类型?
ringa_lee2017-04-18 09:17:18
既然是协议,就要双方约定好,最好有接口文档说明,json虽然只是字符串,但里面的值是有类型区别的,android说他不用标注也许只是他觉得他能看懂你json数据的类型(但不一定是你后端本来想给的数据类型,比如你给float型,他用double取,对于精度要求不高的数值,是没什么区别的),而iOS的可能想清楚严谨一点,他想确定确切的值类型,这时候一定要统一一下,要不以后出问题了你们就说不清了。
黄舟2017-04-18 09:17:18
实际是JSON是有类型的,""扩起来的才是字符串,"value":"1" 和 "value":1是不同的,
当然IOS说的一定要标注,只是他那边不想处理,希望后台能处理好直接用,android只是帮你处理了而已。
这不分谁对谁错,而只是谁愿意多做点。
怪我咯2017-04-18 09:17:18
这个问题的核心在于准确理解JSON这种格式的定义
JSON中的控制字符
{ 键-值对容器(A collection of name/value pairs)的开始
} 键-值对容器的结束
[ 数组容器的开始
] 数组容器的结束
: 键-值对分隔符
“ 字符串的开始或者结束
, 容器内部的分隔符
JSON中的值的类型
string 两个双引号中间的部分,官网原文是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串 在OC中的表现为NSString对象
number 以字符’0’或‘9’开头,官网原文除去未曾使用的八进制与十六进制格式, 在OC中的表现为NSNumber对象.
object 对象类型,在OC中的表现为NSDictionary
值的有序列表(An ordered list of values),俗称array,在OC中的表现为NSArray
null null对象,空对象,在OC中的表现为NSNull
bool true/false 由于OC中并没有关于Boolean对象的存在,所以在OC中的表现为NSNumber
可以看我的播客
http://cocoa1024.com/2016/03/31/stackjson/
高洛峰2017-04-18 09:17:18
不需要,map也能够直接解析
{"aaa,bbb";"aaa,bbb"}
ArrayMap arrayMap = new ArrayMap();
try {
org.json.JSONObject obj = new org.json.JSONObject(content);
Iterator<String> iterator = obj.keys();
while (iterator.hasNext()) {
String key = iterator.next();
String value = (String) obj.get(key);
arrayMap.put(key, value);
}
} catch (JSONException e) {
e.printStackTrace();
}