新手上路(一):基于android平台的投票应用的开发(三)之问题整理

来源:互联网 发布:个人财务报表软件 编辑:程序博客网 时间:2024/06/06 14:20

 今天这个问题也很有意思 !json串的一个问题!,而且我依然很没想明白!

下面这个json串用json校验工具检测的时候是错的 ,但是我android端的解析时候能够解析出来 ,得到数据:

[{type:饮食},{type:娱乐},{type:明星},{type:体育},{type:科技},{type:游戏},{type:书籍},{type:影视},{type:汽车}]
我的组织的代码是:

List<Type> types = new TypeService().getTypes();StringBuilder sb = new StringBuilder();sb.append("[");for(Type type: types){sb.append("{").append("type").append(":").append(type.getTypeContent());sb.append("}").append(",");}

Type的typeContent属性是string类型的;

我的解析的代码:

public static List<String> getTypeFromJSON(String json) throws IOException, JSONException {List<String> types = new ArrayList<String>();Log.i("json1",json);JSONArray array = new JSONArray(json);for(int i=0;i<array.length();i++){JSONObject obj = array.getJSONObject(i);types.add(obj.getString("type"));}return types;
这里解析出的结果是对的:05-21 13:37:07.986: I/Dubug(360): [饮食, 娱乐, 明星, 体育, 科技, 游戏, 书籍, 影视, 汽车]

我还有一个json串:

[{topicContent:你好吗?,topicResult:0,topicStartTime:2013-05-17 00:00:00.0,userName:byk,userHeadImage:male,userTopicId:1},{topicContent:xiamiannagegenghao?,topicResult:0,topicStartTime:2013-05-20 00:00:00.0,userName:byk,userHeadImage:male,userTopicId:4},{topicContent:xiamian nage genghao?,topicResult:0,topicStartTime:2013-05-20 00:00:00.0,userName:byk,userHeadImage:male,userTopicId:5}]
这个串用json校验工具校验的时候是错的,android来解析的时候也是错的 ;

我的组织的代码是:

List<HashMap<String , String>> result = new HomePageService().getResults();StringBuilder sb = new StringBuilder();System.out.println("一共有几个记录?:"+result.size());if(result == null){sb.append("");}else{sb.append("[");for(HashMap<String , String> item : result){sb.append("{");   //"\""for(Map.Entry<String, String> itemEntry : item.entrySet()){  //json的key应该用引号括住sb.append(itemEntry.getKey()).append(":").append(itemEntry.getValue());sb.append(",");}sb.deleteCharAt(sb.length()-1);sb.append("}").append(",");}sb.deleteCharAt(sb.length()-1);sb.append("]");}

解析和上面一样 ,JSONArrray array = new JSONArray(json);

我发现错了以后查了几个资料,然后又把这个组织的代码改了以后他就对了,只是对name和value都加了个引号:

List<HashMap<String , String>> result = new HomePageService().getResults();StringBuilder sb = new StringBuilder();System.out.println("一共有几个记录?:"+result.size());if(result == null){sb.append("");}else{sb.append("[");for(HashMap<String , String> item : result){sb.append("{");   //"\""for(Map.Entry<String, String> itemEntry : item.entrySet()){  //json的key应该用引号括住sb.append("\""+itemEntry.getKey()+"\"").append(":").append("\""+itemEntry.getValue()+"\"");sb.append(",");}sb.deleteCharAt(sb.length()-1);sb.append("}").append(",");}sb.deleteCharAt(sb.length()-1);sb.append("]");}

然后输出的json串变成了这样:

[{"topicContent":"你好吗?","topicResult":"0","topicStartTime":"2013-05-17 00:00:00.0","userName":"byk","userHeadImage":"male","userTopicId":"1"},{"topicContent":"xiamiannagegenghao?","topicResult":"0","topicStartTime":"2013-05-20 00:00:00.0","userName":"byk","userHeadImage":"male","userTopicId":"4"},{"topicContent":"xiamian nage genghao?","topicResult":"0","topicStartTime":"2013-05-20 00:00:00.0","userName":"byk","userHeadImage":"male","userTopicId":"5"}]

然后android解析的时候他就对了! 这个我没异议了 ,json校验工具也表示对了,可以上面type那个依然是错的 ,但是可以校验出来!这是为什么?

后来我又把组织type那个json的代码稍微改了一下 ,把形式和那个组织Topic的那个错的代码改成一样,发现它的输出依然是错的 ,但是依然可以解析出结果来,代码如下:

List<Type> types = new TypeService().getTypes();StringBuilder sb = new StringBuilder();String str = "type";sb.append("[");for(Type type: types){sb.append("{").append(str).append(":").append(type.getTypeContent());sb.append("}").append(",");}sb.deleteCharAt(sb.length()-1);sb.append("]");
输出的json:

[{type:饮食},{type:娱乐},{type:明星},{type:体育},{type:科技},{type:游戏},{type:书籍},{type:影视},{type:汽车}]


本来以为是因为引号的错 ,但是上面那个topic 的json的出错也证明了是引号的错,但是下面这个改了以后的type的代码,又好像要把我这个结论推翻了!

哪位看官给个具体而且合理的解释好不……!!!!

十分感谢!

原创粉丝点击