首页 > 技术文章 > java后台处理解析json字符串的两种方式

meng-ma-blogs 原文

简单说一下背景

上次后端通过模拟http请求百度地图接口,得到的是一个json字符串,而我只需要其中的某个key对应的value。

当时我是通过截取字符串取的,后来觉得不太合理,今天整理出了两种处理解析json字符串的方式。

供大家参考。

顺便说一下所解析的字符串一定要是“{”开始,“}”结束,

而百度地图返回数据是这样的

renderReverse&&renderReverse({"status":0,"result":{"location":{"lng":116.23412299999993,"lat":40.234523047443769},"formatted_address":"北京市昌平区北环路54号楼","business":"昌平县城","addressComponent":{"country":"中国","country_code":0,"country_code_iso":"CHN","country_code_iso2":"CN","province":"北京市","city":"北京市","city_level":2,"district":"昌平区","town":"","adcode":"110114","street":"北环路","street_number":"54号楼","direction":"附近","distance":"27"},"pois":[],"roads":[],"poiRegions":[{"direction_desc":"内","name":"北环里小区","tag":"房地产;住宅区","uid":"dc0f0adc0773a420f8221312"}],"sematic_description":"北环里小区内,双海包装制品厂北299米","cityCode":131}})

所以在解析前我加了这行代码

String subData = dataStr.substring(dataStr.indexOf("(") + 1, dataStr.lastIndexOf(")"));

第一种(ObjectMapper)

首先在pom文件配置需要的jar

这里以2.4version为例

<!-- JSON -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate4</artifactId>
<version>${jackson.version}</version>
</dependency>

其次在java类中引入需要的外部类

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

最后处理百度地图返回的json串

if("" != dataStr){
ObjectMapper objectMapper = new ObjectMapper();
String subData = dataStr.substring(dataStr.indexOf("(") + 1, dataStr.lastIndexOf(")"));
JsonNode jsonNode = objectMapper.readTree(subData);
adcode = jsonNode.get("result").get("addressComponent").get("adcode").toString().replace(""","");
}

最后得到需要的经纬度信息

第二种(JSONObject)

首先在pom文件配置需要的jar

这里以2.4version为例

<dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk15</classifier>
</dependency>

其次在java类中引入需要的外部类

import net.sf.json.JSONObject;    
import net.sf.json.JSON;

最后处理百度地图返回的json串

String subData = dataStr.substring(dataStr.indexOf("(") + 1, dataStr.lastIndexOf(")"));
JSONObject jsonData = JSONObject.fromObject(subData);
JSONObject result = (JSONObject) jsonData.get("result");
JSONObject location = (JSONObject) result.get("location");
 if(null != location.get("lng") && null != location.get("lat")){
        String lng = location.get("lng").toString();
        String lat = location.get("lat").toString();
        doubles[0] = Double.parseDouble(lng);
        doubles[1] = Double.parseDouble(lat);
}

最后得到需要的经纬度信息

推荐阅读