关于 json解析过程中的一个问题的解决

在Android项目中,由于未对含有汉字的URL进行编码导致JSON解析错误。通过使用URLEncoder.encode对城市名进行编码,成功避免了JSONException,确保了数据的正确解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在编写一个项目练手的时候,发现程序并没有缺少数据,也没有语法错误,部分程序如下:

private void initViewOper() {
// TODO Auto-generated method stub
//获取当前天气信息,聚合数据里查找天气信息
//发get请求 用xutilsl来使用

String url = "http://v.juhe.cn/weather/index?cityname=北京&key=4f0400b15ffec0136daf3350cb408480";
hu.send(HttpMethod.GET, url, new RequestCallBack<String>() {


@Override
public void onFailure(HttpException arg0, String arg1) {
// TODO Auto-generated method stub
toast("获取天气资料失败");
}


@Override
public void onSuccess(ResponseInfo<String> arg0) {
// TODO Auto-generated method stub
String result1 = arg0.result;
if(result1 != null && result1.startsWith("\ufeff"))  
{  
result1 =  result1.substring(1);  

String weather_content = parseJson(result1);
weather.setText(weather_content);
}
});
}
private String parseJson(String result) {
// TODO Auto-generated method stub
try {
JSONObject jo = new JSONObject(result);//最外层
JSONObject jo1 = jo.getJSONObject("result");
JSONObject jo2 = jo1.getJSONObject("today");
return jo2.getString("weather");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "多云";
}

但是在运行过程中总是出现 一下错误:

07-19 11:19:16.180: W/System.err(587): org.json.JSONException: Value null at result of type org.json.JSONObject$1 cannot be converted to JSONObject
07-19 11:19:16.180: W/System.err(587): at org.json.JSON.typeMismatch(JSON.java:96)


07-19 11:19:16.180: W/System.err(587): at org.json.JSONObject.getJSONObject(JSONObject.java:573)
07-19 11:19:16.180: W/System.err(587): at com.example.secretsofmy.newSecret.parseJson(newSecret.java:66)
07-19 11:19:16.180: W/System.err(587): at com.example.secretsofmy.newSecret.access$0(newSecret.java:62)
07-19 11:19:16.180: W/System.err(587): at com.example.secretsofmy.newSecret$1.onSuccess(newSecret.java:57)
07-19 11:19:16.180: W/System.err(587): at com.lidroid.xutils.http.HttpHandler.onProgressUpdate(HttpHandler.java:218)
07-19 11:19:16.180: W/System.err(587): at com.lidroid.xutils.task.PriorityAsyncTask$InternalHandler.handleMessage(PriorityAsyncTask.java:385)
07-19 11:19:16.180: W/System.err(587): at android.os.Handler.dispatchMessage(Handler.java:99)
07-19 11:19:16.180: W/System.err(587): at android.os.Looper.loop(Looper.java:130)
07-19 11:19:16.180: W/System.err(587): at android.app.ActivityThread.main(ActivityThread.java:3683)
07-19 11:19:16.180: W/System.err(587): at java.lang.reflect.Method.invokeNative(Native Method)
07-19 11:19:16.180: W/System.err(587): at java.lang.reflect.Method.invoke(Method.java:507)
07-19 11:19:16.180: W/System.err(587): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
07-19 11:19:16.180: W/System.err(587): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
07-19 11:19:16.180: W/System.err(587): at dalvik.system.NativeStart.main(Native Method)

可以看出是 Json 解析出来了问题,导致无法解析得到的 result数据(result包含了json数据的所有子数据)

产生这种问题的原因是 汉字需要进行URL编码:

String url = "http://v.juhe.cn/weather/index?cityname=北京&key=4f0400b15ffec0136daf3350cb408480";

改为url编码

String url = "http://v.juhe.cn/weather/index?cityname="


+ URLEncoder.encode("北京")


+ "&key=4f0400b15ffec0136daf3350cb408480";

这样解析过程就不会报转换错误了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值