JSONObject #getString(String string) 空值(null)问题

今天在android4.4.2(android-19)平台上做Json数据解析的时候碰到了这样一个问题:

返回的数据为:{"message":null}

当使用:JSONObject jsonObj = new JSONObject(jsonMessage);

String message=jsonObj.getString("message");

本以为message 是空值(null)

结果总不能如愿,最后发现:getString(),如果value是空值,那么这个方法会返回一个“null"字面量,而不是null对象。


源码:

    /**
     * Returns the value mapped by {@code name} if it exists, coercing it if
     * necessary.
     *
     * @throws JSONException if no such mapping exists.
     */
    public String getString(String name) throws JSONException {
        Object object = get(name);
        String result = JSON.toString(object);
        if (result == null) {
            throw JSON.typeMismatch(name, object, "String");
        }
        return result;
    }


package sy; import java.io.BufferedReader; import java.net.*; import org.json.*; import java.io.*; public class POIService { private static String urlString="https://restapi.amap.com/v3/place/text?"; private String REQUEST_URL; public String getREQUEST_URL() { return REQUEST_URL; } public void setREQUEST_URL(String REQUEST_URL) { //��һ���иĶ� this.REQUEST_URL=REQUEST_URL; } public POIService (String params) { this.REQUEST_URL=urlString+params; } public String getPOIinfo() { StringBuffer resultBuffer=new StringBuffer(); try { URL url=new URL(this.REQUEST_URL); URLConnection connection=url.openConnection(); BufferedReader bReader=new BufferedReader(new InputStreamReader(connection.getInputStream(),"UTF-8")); String strlineString=null; while ((strlineString=bReader.readLine())!=null) { resultBuffer.append(strlineString); } bReader.close(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } //System.out.print(resultBuffer.toString()); return resultBuffer.toString(); } public int parseJson(String resultString,int currentPage,int offset) throws Exception{ JSONObject jsonResult=new JSONObject(resultString); int status=jsonResult.getInt("status"); if (status==0) { System.out.print("ʧ��"); return -1; } else { JSONArray poiArr=jsonResult.getJSONArray("pois"); int totalcount = jsonResult.getInt("count"); System.out.print("����"+totalcount+"���"); for (int i = 0; i < poiArr.length(); i++) { JSONObject poiObj=poiArr.getJSONObject(i); String idString=poiObj.getString("idString"); String nameString=poiObj.getString("nameString"); String typeString=poiObj.getString("typeString"); String addressString=poiObj.getString("addressString"); String locationString=poiObj.getString("locationString"); String citynameString=poiObj.getString("citynameString"); String adnameString=poiObj.getString("adnameString"); POI poi=new POI(idString,nameString,typeString,addressString,locationString,citynameString,adnameString); System.out.println(((currentPage-1)*offset+i+1)+"|"+poi.getIdString()+"|"+poi.getNameString()+"|"+poi.getTypeString()+"|"+poi.getAddressString()+"|"+poi.getLocationString()+"|"+poi.getCitynameString()+"|"+poi.getAdnameString()); } System.out.println("------------"); return poiArr.length(); }请帮我检查这份代码的问题
06-09
`restTemplate.postForObject` 是 Spring 框架中 RestTemplate 类的一个方法,用于发送 HTTP POST 请求,并期望返回一个对象。这个方法通常用于与 RESTful Web 服务进行交互。 关于你提到的 `#` 号乱码问题,这通常是因为 HTTP 请求在传输过程中字符编码没有正确处理导致的。在 Java 中,默认的字符编码是平台依赖的,这可能会导致在发送和接收数据时出现编码问题,尤其是涉及到 URL 编码和解码时。 为了解决 `#` 号乱码问题,可以按照以下步骤操作: 1. 确保客户端(发送请求的应用)使用正确的字符编码将数据编码成 URL 编码字符串。 2. 确保服务器端正确地解码 URL 编码的字符串。 3. 如果是在请求参数中出现乱码,可以在发送请求之前对 URL 进行编码,比如使用 `URLEncoder.encode` 方法进行编码。 4. 在服务器端接收到数据后,正确使用 URL 解码器进行解码。 在 Spring 中,RestTemplate 默认使用 ISO-8859-1 编码,如果你的请求体包含非 ISO-8859-1 字符集的字符(如中文等),则可能需要设置字符集为 UTF-8,以确保字符正确编码和解码。 以下是一个简单的代码示例,展示了如何设置字符集: ```java RestTemplate restTemplate = new RestTemplate(); String url = "http://example.com/api"; String requestJson = "{\"key\":\"value\"}"; HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.setAcceptCharset(Collections.singletonList(StandardCharsets.UTF_8)); HttpEntity<String> entity = new HttpEntity<>(requestJson, headers); JSONObject response = restTemplate.postForObject(url, entity, JSONObject.class); ``` 在这个例子中,我们设置了请求头 `ContentType` 和 `AcceptCharset`,以确保 HTTP 头部信息中包含正确的字符集信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值