简介
JsonPath是一种简单的方法来提取JSON文档的方法。它支持的编程语言有很多,如java、python、JavaScript和PHP。
JsonPath提供的json解析非常强大,它提供了类似正则表达式的语法,基本上可以满足所有你想要获得的json内容。
maven依赖
<!-- https://mvnrepository.com/artifact/com.jayway.jsonpath/json-path -->
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.6.0</version>
</dependency>
操作符
操作符 | 说明 |
---|---|
$ | 表示根元素 |
@ | 当前元素 |
. or [] | 子元素 |
n/a | 父元素 |
* | 通配符,表示所有的元素 |
.. | 选择所有符合条件的节点 |
[] | 迭代器标识,如数组下标 |
[,] | 连接操作符在XPath 结果合并其它结点集合。JSONP允许name或者数组索引。 |
[start,step] | 数组切片操作 |
?() | 过滤表达式 |
() | 支持表达式计算 |
函数
函数可以在路径的尾部调用,函数的输出是路径表达式的输出,该函数的输出是由函数本身所决定的
函数 | 描述 | 输出 |
---|---|---|
min() | 提供数组的最小值 | Double |
max() | 提供数组的最大值 | Double |
avg() | 提供数组的平均值 | Double |
stddev() | 提供数组的标准偏差值 | Double |
length() | 提供数组的长度 | Integer |
sum() | 提供数组的总和 | Double |
keys() | 提供属性键(终端波浪号的替代方案 ~) | Set |
concat(X) | 提供带有新项目的路径输出的串联版本 | like input |
append(X) | 向 json 路径输出数组添加一个项目 | like input |
过滤操作符
过滤器是用于过滤数组的逻辑表达式。 典型的过滤器是 [?(@.age > 18)] 表示当前节点属性 age 大于 18,其中 @ 代表正在处理的当前项目。 可以使用逻辑运算符 && 和 || 来创建更复杂的过滤器。 字符串文字必须用单引号或双引号括起来([?(@.color == ‘blue’)] 或 [?(@.color == “blue”)])。
操作符 | 说明 |
---|---|
== | left等于right(注意1不等于’1’) |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
=~ | 匹配正则表达式[?(@.name =~ /foo.*?/i)] |
in | 左边存在于右边 [?(@.size in [‘S’, ‘M’])] |
nin | 左边不存在于右边 |
subsetof | 左边是 右边 [?(@.sizes subnetof [‘S’, ‘M’, ‘L’])] 的子集 |
anyof | 左边与右边有交集 [?(@.sizes anyof [‘M’, ‘L’])] |
noneof | 左边与右边没有交集 [?(@.sizes noneof [‘M’, ‘L’])] |
size | (数组或字符串)长度 |
empty | (数组或字符串)为空 |
Java版测试
测试的json数据
{
"text" : "张三",
"expensive" : 6,
"body" : {
"rvNoNum" : 23,
"rvNoRecords" : [
{
"score" : 4,
"rvAddress" : "2",
"consignments" : null
},
{
"score" : 8,
"rvAddress" : "3",
"consignments" : null
}
]
}
}
测试代码
package jsonpathdemo;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.jayway.jsonpath.JsonPath;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
public class jsonpathTest {
public static void main(String[] args) throws IOException {
// 定义需要测试的json字符串
String testJson = "{
" +
" "text": "张三",
" +
" "expensive": 6,
" +
" "body": {
" +
" "rvNoNum": 23,
" +
" "rvNoRecords": [{
" +
" "score": 4,
" +
" "rvAddress": "2",
" +
" "consignments": null
" +
" }, {
" +
" "score": 8,
" +
" "rvAddress": "3",
" +
" "consignments": null
" +
" }]
" +
" }
" +
"}";
//使用jackson对字符串反序列化为json对象
ObjectMapper mapper = new ObjectMapper ( );
HashMap responseJson = mapper.readValue ( testJson, HashMap.class );
// 输出text的值
String text = JsonPath.read(responseJson,"$.text");
System.out.println (text );
// 输出rvNoNum的值
int rvNoNum = JsonPath.read(responseJson,"$.body.rvNoNum");
System.out.println ( rvNoNum);
//输出rvNoRecords数组的第2个值
List<Object> rvNoRecords = JsonPath.read(responseJson,"$..rvNoRecords[1]");
System.out.println ( rvNoRecords);
//输出rvNoRecords数组的第1和第2个值
List<Object> rvNoRecords1 = JsonPath.read(responseJson,"$..rvNoRecords[0,1]");
System.out.println (rvNoRecords1 );
//输出rvNoRecords数组中score<=expensive的所有值
List<Object> rvNoRecords2 = JsonPath.read(responseJson,"$..rvNoRecords[?(@.score < $['expensive'])]");
System.out.println ( rvNoRecords2);
//输出rvNoRecords[0]的rvAddress值
String rvAddress1 = JsonPath.read(responseJson, "$.body.rvNoRecords[0].rvAddress");
System.out.println ( rvAddress1);
//输出全部rvAddress的值,使用Iterator迭代
List<String> rvAddress = JsonPath.read(responseJson,"$.body.rvNoRecords[*].rvAddress");
System.out.println ( rvAddress);
//输出rvNoRecords[*]中rvAddress== '2'的rvNoRecords
List<Object> rvAddress2 = JsonPath.read(responseJson,"$.body.rvNoRecords[?(@.rvAddress == 2)]");
System.out.println (rvAddress2 );
//输出rvNoRecords[*]中score>5 的rvNoRecords
List<Object> score = JsonPath.read(responseJson,"$.body.rvNoRecords[?(@.score>5)]");
System.out.println ( score);
//输出rvNoRecords[*]中含有consignments元素的rvNoRecords
List<Double> consignments = JsonPath.read(responseJson,"$.body.rvNoRecords[?(@.consignments)]");
System.out.println ( consignments);
//输出该json中所有rvAddress的值
List<Object> rvNoNum2 = JsonPath.read(responseJson,"$..rvAddress");
System.out.println (rvNoNum2 );
//输出rvNoRecords数组的长度
Integer length = JsonPath.read(responseJson,"$..rvNoRecords.length()");
System.out.println (length );
//可以提前编辑一个路径,并多次使用它
JsonPath path = JsonPath.compile("$.body.rvNoRecords[*]");
List<Object> rvNoRecords3 = path.read(responseJson);
System.out.println (rvNoRecords3 );
}
}
测试结果
张三
23
[{"score":8,"rvAddress":"3","consignments":null}]
[{"score":4,"rvAddress":"2","consignments":null},{"score":8,"rvAddress":"3","consignments":null}]
[{"score":4,"rvAddress":"2","consignments":null}]
2
["2","3"]
[{"score":4,"rvAddress":"2","consignments":null}]
[{"score":8,"rvAddress":"3","consignments":null}]
[{"score":4,"rvAddress":"2","consignments":null},{"score":8,"rvAddress":"3","consignments":null}]
["2","3"]
2
[{"score":4,"rvAddress":"2","consignments":null},{"score":8,"rvAddress":"3","consignments":null}]
JS版测试
简单测试
var jp = require('jsonpath');
var cities = [
{ name: 'London', population: 8615246 },
{ name: 'Berlin', population: 3517424 },
{ name: 'Madrid', population: 3165235 },
{ name: 'Rome', population: 2870528 },
];
var names = jp.query(cities, '$..name');
// [ "London", "Berlin", "Madrid", "Rome" ]
如果使用 js 来遍历的话,也简单
let names = cities.map((c) => c.name);
复杂数据例子
{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}
JsonPath | Result |
---|---|
$.store.book[*].author | 所有 book 的 author 节点 |
$..author | 所有 author 节点 |
$.store.* | store 下的所有节点,book 数组和 bicycle 节点 |
$.store..price | store 下的所有 price 节点 |
$..book[2] | 匹配第 3 个 book 节点 |
$..book[(@.length-1)],或 $..book[-1:] | 匹配倒数第 1 个 book 节点 |
$..book[0,1],或 $..book[:2] | 匹配前两个 book 节点 |
$..book[?(@.isbn)] | 过滤含 isbn 字段的节点 |
$..book[?(@.price<10)] | 过滤price<10的节点 |
$..* | 递归匹配所有子节点 |
对应的语法可直接到在 JSONPath 在线验证网站上进行测试。要提一点的是,jsonpath 是支持使用 || 与 && 进行过滤的,比如上面要获取 category 为 fiction,price 大于 10 的语法为$..book[?(@.price>10 && @.category==”fiction”)] 结果如下
[
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
]
测试数据结构
测试数据
{
"role": "unit",
"children": [
{
"role": "section",
"children": [
{
"role": "node",
"children": [
{
"summary": "{\"indexMap\": {}, \"questionsList\": []}",
"role": "group",
"tab_type": "text",
"name": "Learning objectives",
"scoreDetail": [],
"id": "u1g2",
"url": "u1g2",
"tags": []
}
],
"suggestedDuration": "0",
"name": "1-1 Learning objectives",
"block_id": "90ed499f91084e2aa1b7032d2e4ecd76",
"url": "u1g1",
"tags": []
}
],
"name": "Learning objectives",
"tags": []
},
{
"role": "section",
"children": [
{
"role": "node",
"children": [
{
"role": "node",
"children": [
{
"role": "group",
"tab_type": "task",
"name": "Practice-1",
"scoreDetail": [0],
"id": "u1g6",
"url": "u1g6",
"tags": []
},
{
"role": "group",
"tab_type": "task",
"name": "Practice-2",
"scoreDetail": [1, 1, 1, 1],
"id": "u1g7",
"url": "u1g7",
"tags": []
},
{
"role": "group",
"tab_type": "task",
"name": "Practice-3",
"scoreDetail": [1, 1, 1, 1, 1],
"id": "u1g544",
"url": "u1g544",
"tags": []
},
{
"role": "group",
"tab_type": "task",
"name": "Practice-4",
"scoreDetail": [1, 1, 1, 1, 1],
"id": "u1g9",
"url": "u1g9",
"tags": []
}
],
"name": "Practice",
"block_id": "f6768dc9474746b9ba071e7f211534d9",
"url": "u1g5",
"tags": []
}
],
"suggestedDuration": "0",
"name": "1-2 Sharing",
"block_id": "1c97a87a9feb4a8aa7d6ed39482d866d",
"url": "u1g3",
"tags": []
},
{
"role": "node",
"children": [
{
"role": "group",
"tab_type": "video",
"name": "Get the skills",
"scoreDetail": [],
"id": "u1g16",
"url": "u1g16",
"tags": []
},
{
"role": "node",
"children": [
{
"role": "group",
"tab_type": "task",
"name": "Use the skills-1",
"scoreDetail": [0, 0],
"id": "u1g615",
"url": "u1g615",
"tags": []
},
{
"role": "group",
"tab_type": "task",
"name": "Use the skills-2",
"scoreDetail": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
"id": "u1g18",
"url": "u1g18",
"tags": []
},
{
"role": "group",
"tab_type": "task",
"name": "Use the skills-3",
"scoreDetail": [0, 0, 0, 0, 0, 0, 0],
"id": "u1g19",
"url": "u1g19",
"tags": []
}
],
"name": "Use the skills",
"block_id": "2d8a81799bcc44ccab2646b613557b2b",
"url": "u1g17",
"tags": []
},
{
"role": "node",
"children": [
{
"role": "group",
"tab_type": "task",
"name": "Think and speak",
"scoreDetail": [0],
"id": "u1g21",
"url": "u1g21",
"tags": []
}
],
"name": "Think and speak",
"block_id": "5833925c8c5e4ddab7a114b15d610983",
"url": "u1g20",
"tags": []
}
],
"suggestedDuration": "0",
"name": "1-3 Listening",
"block_id": "681817aaf75845468e464e1a8d82f2c8",
"url": "u1g14",
"tags": []
},
{
"role": "node",
"children": [
{
"role": "node",
"children": [
{
"role": "group",
"tab_type": "task",
"name": "Get a clue",
"scoreDetail": [0, 0, 0],
"id": "u1g25",
"url": "u1g25",
"tags": []
}
],
"name": "Get a clue",
"block_id": "b332335ab3554dffb92afcae5f815b5a",
"url": "u1g24",
"tags": []
},
{
"role": "node",
"children": [
{
"role": "group",
"tab_type": "task",
"name": "View it-1",
"scoreDetail": [1, 1, 1, 1],
"id": "u1g27",
"url": "u1g27",
"tags": []
},
{
"role": "group",
"tab_type": "task",
"name": "View it-2",
"scoreDetail": [1, 1, 1, 1, 1, 1, 1],
"id": "u1g545",
"url": "u1g545",
"tags": []
},
{
"role": "group",
"tab_type": "task",
"name": "View it-3",
"scoreDetail": [1, 1, 1, 1, 1, 1, 1, 1],
"id": "u1g29",
"url": "u1g29",
"tags": []
}
],
"name": "View it",
"block_id": "a2ecf6464d5f480e98242ebe4431a73b",
"url": "u1g26",
"tags": []
},
{
"role": "node",
"children": [
{
"role": "group",
"tab_type": "task",
"name": "Think and speak",
"scoreDetail": [0, 0],
"id": "u1g31",
"url": "u1g31",
"tags": []
}
],
"name": "Think and speak",
"block_id": "120d0784e63c414793f5e648c416144b",
"url": "u1g30",
"tags": []
}
],
"suggestedDuration": "0",
"name": "1-4 Viewing",
"block_id": "765a1be83ac5437aaca8fa150ad5af2e",
"url": "u1g22",
"tags": []
}
],
"name": "Listening to the world",
"tags": []
}
]
}
js 实现遍历
获取role为group的children节点数据
let groupList = [];
for (const node of json.children ?? []) {
if (node.role == 'group') groupList.push({ ...node });
for (const group of node.children ?? []) {
if (group.role == 'group') groupList.push({ ...group });
for (const child of group.children ?? []) {
if (child.role == 'group') groupList.push({ ...child });
let children4 = child.children ?? [];
for (const child of children4) {
if (child.role == 'group') groupList.push({ ...child });
}
}
}
}
console.log(groupList);
因为这些数据中,是存在不确定性的,也就是在当前节点下,二级节点可能有children,而其他节点下的二级很可能没有 children,所以我在这边就加上 ?? [] (Typescript 中的??语法,你可以把 ?? 当做 || )来判断是否有children节点,有些读者可能会思考,为啥不用递归呢。说的是挺轻松的,但是递归是很容易出问题的,万一爬取到后台数据进行了一些修改,很有可能对于的递归算法将失效,甚至导致堆栈溢出,所以我这边值循环 4 级chilren节点(实际遇到的貌似也只有 4 级,谁又能保证爬取到数据就一定只有 4 级呢)。
jsonpath 获取
于是了解到 jsonpath后,我第一个时间就开始分析这样的数据,果不其然,得到了我想要的结果⬇️
语法:$..children[?(@.role==”group”)]
语法意思很明确,根节点下遍历所有children节点,同时role等于group,呈现的效果如上图。
而回到需求,就是获取role为group的children节点数据,而 jsonpath 就帮我轻松实现我想要的效果。
Python版测试
Python 2.7中自带了JSON模块,直接import json就可以使用了。
官方文档:json — JSON encoder and decoder — Python 3.11.0 documentation
Json在线解析网站:http://www.json.cn/
JSON
json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构。
对象:对象在js中表示为{ }括起来的内容,数据结构为 { key:value, key:value, … }的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是数字、字符串、数组、对象这几种。
数组:数组在js中是中括号[ ]括起来的内容,数据结构为 [“Python”, “javascript”, “C++”, …],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。
import json
json模块提供了四个功能:dumps、dump、loads、load,用于字符串 和 python数据类型间进行转换。
1. json.loads()
把Json格式字符串解码转换成Python对象 从json到python的类型转化对照如下:
# json_loads.py
import json
strList = '[1, 2, 3, 4]'
strDict = '{"city": "北京", "name": "大猫"}'
json.loads(strList)
# [1, 2, 3, 4]
json.loads(strDict) # json数据自动按Unicode存储
# {u'city': u'\u5317\u4eac', u'name': u'\u5927\u732b'}
2. json.dumps()
实现python类型转化为json字符串,返回一个str对象 把一个Python对象编码转换成Json字符串
从python原始类型向json类型的转化对照如下:
# json_dumps.py
import json
import chardet
listStr = [1, 2, 3, 4]
tupleStr = (1, 2, 3, 4)
dictStr = {"city": "北京", "name": "大猫"}
json.dumps(listStr)
# '[1, 2, 3, 4]'
json.dumps(tupleStr)
# '[1, 2, 3, 4]'
# 注意:json.dumps() 处理中文时默认使用的ascii编码,会导致中文无法正常显示
print json.dumps(dictStr)
# {"city": "\u5317\u4eac", "name": "\u5927\u732b"}
# 记住:处理中文时,添加参数 ensure_ascii=False 来禁用ascii编码
print json.dumps(dictStr, ensure_ascii=False)
# {"city": "北京", "name": "大刘"}
3. json.dump()
将Python内置类型序列化为json对象后写入文件
# json_dump.py
import json
listStr = [{"city": "北京"}, {"name": "大刘"}]
json.dump(listStr, open("listStr.json","w"), ensure_ascii=False)
dictStr = {"city": "北京", "name": "大刘"}
json.dump(dictStr, open("dictStr.json","w"), ensure_ascii=False)
4. json.load()
读取文件中json形式的字符串元素 转化成python类型
# json_load.py
import json
strList = json.load(open("listStr.json"))
print strList
# [{u'city': u'\u5317\u4eac'}, {u'name': u'\u5927\u5218'}]
strDict = json.load(open("dictStr.json"))
print strDict
# {u'city': u'\u5317\u4eac', u'name': u'\u5927\u5218'}
JsonPath测试
测试数据
以拉勾网城市JSON文件 http://www.lagou.com/lbs/getAllCitySearchLabels.json 为例,获取所有城市。
{
"state": 1,
"message": "success",
"content": {
"data": {
"allCitySearchLabels": {
"A": [
{
"id": 671,
"name": "安庆",
"parentId": 541,
"code": "131800000",
"isSelected": false
},
{
"id": 723,
"name": "安阳",
"parentId": 545,
"code": "171500000",
"isSelected": false
},
{
"id": 601,
"name": "鞍山",
"parentId": 535,
"code": "081600000",
"isSelected": false
},
{
"id": 825,
"name": "安顺",
"parentId": 553,
"code": "240400000",
"isSelected": false
},
{
"id": 598,
"name": "阿拉善盟",
"parentId": 534,
"code": "070300000",
"isSelected": false
},
{
"id": 862,
"name": "安康",
"parentId": 556,
"code": "270400000",
"isSelected": false
},
{
"id": 105795,
"name": "澳门",
"parentId": 562,
"code": "330100000",
"isSelected": false
},
{
"id": 897,
"name": "阿克苏",
"parentId": 560,
"code": "311800000",
"isSelected": false
},
{
"id": 108412,
"name": "阿拉尔",
"parentId": 560,
"code": "312600000",
"isSelected": false
},
{
"id": 108343,
"name": "阿里地区",
"parentId": 555,
"code": "260800000",
"isSelected": false
}
],
"B": [
{
"id": 5,
"name": "北京",
"parentId": 1,
"code": "010100000",
"isSelected": false
},
{
"id": 570,
"name": "保定",
"parentId": 532,
"code": "051100000",
"isSelected": false
},
{
"id": 588,
"name": "包头",
"parentId": 534,
"code": "071300000",
"isSelected": false
},
{
"id": 789,
"name": "北海",
"parentId": 549,
"code": "211000000",
"isSelected": false
},
{
"id": 666,
"name": "蚌埠",
"parentId": 541,
"code": "131300000",
"isSelected": false
},
{
"id": 717,
"name": "滨州",
"parentId": 544,
"code": "161400000",
"isSelected": false
},
{
"id": 794,
"name": "百色",
"parentId": 549,
"code": "210500000",
"isSelected": false
},
{
"id": 678,
"name": "亳州",
"parentId": 541,
"code": "130500000",
"isSelected": false
},
{
"id": 856,
"name": "宝鸡",
"parentId": 556,
"code": "271000000",
"isSelected": false
},
{
"id": 828,
"name": "毕节",
"parentId": 553,
"code": "240700000",
"isSelected": false
},
{
"id": 867,
"name": "白银",
"parentId": 557,
"code": "281100000",
"isSelected": false
},
{
"id": 834,
"name": "保山",
"parentId": 554,
"code": "251400000",
"isSelected": false
},
{
"id": 896,
"name": "巴音郭楞",
"parentId": 560,
"code": "311700000",
"isSelected": false
},
{
"id": 817,
"name": "巴中",
"parentId": 552,
"code": "230500000",
"isSelected": false
},
{
"id": 597,
"name": "巴彦淖尔",
"parentId": 534,
"code": "070400000",
"isSelected": false
},
{
"id": 603,
"name": "本溪",
"parentId": 535,
"code": "081400000",
"isSelected": false
}
],
"C": [
{
"id": 801,
"name": "成都",
"parentId": 552,
"code": "230100000",
"isSelected": false
},
{
"id": 8,
"name": "重庆",
"parentId": 4,
"code": "040100000",
"isSelected": false
},
{
"id": 749,
"name": "长沙",
"parentId": 547,
"code": "190100000",
"isSelected": false
},
{
"id": 613,
"name": "长春",
"parentId": 536,
"code": "090100000",
"isSelected": false
},
{
"id": 638,
"name": "常州",
"parentId": 539,
"code": "112000000",
"isSelected": false
},
{
"id": 573,
"name": "沧州",
"parentId": 532,
"code": "050800000",
"isSelected": false
},
{
"id": 673,
"name": "滁州",
"parentId": 541,
"code": "131100000",
"isSelected": false
},
{
"id": 758,
"name": "郴州",
"parentId": 547,
"code": "190500000",
"isSelected": false
},
{
"id": 108405,
"name": "澄迈",
"parentId": 550,
"code": "223400000",
"isSelected": false
},
{
"id": 755,
"name": "常德",
"parentId": 547,
"code": "190800000",
"isSelected": false
},
{
"id": 781,
"name": "潮州",
"parentId": 548,
"code": "200500000",
"isSelected": false
},
{
"id": 572,
"name": "承德",
"parentId": 532,
"code": "050900000",
"isSelected": false
},
{
"id": 590,
"name": "赤峰",
"parentId": 534,
"code": "071100000",
"isSelected": false
},
{
"id": 679,
"name": "池州",
"parentId": 541,
"code": "130600000",
"isSelected": false
},
{
"id": 836,
"name": "楚雄",
"parentId": 554,
"code": "251200000",
"isSelected": false
},
{
"id": 894,
"name": "昌吉",
"parentId": 560,
"code": "311500000",
"isSelected": false
},
{
"id": 611,
"name": "朝阳",
"parentId": 535,
"code": "080600000",
"isSelected": false
}
],
"D": [
{
"id": 779,
"name": "东莞",
"parentId": 548,
"code": "200300000",
"isSelected": false
},
{
"id": 600,
"name": "大连",
"parentId": 535,
"code": "081700000",
"isSelected": false
},
{
"id": 715,
"name": "德州",
"parentId": 544,
"code": "161600000",
"isSelected": false
},
{
"id": 805,
"name": "德阳",
"parentId": 552,
"code": "231700000",
"isSelected": false
},
{
"id": 815,
"name": "达州",
"parentId": 552,
"code": "230300000",
"isSelected": false
},
{
"id": 841,
"name": "大理",
"parentId": 554,
"code": "250700000",
"isSelected": false
},
{
"id": 577,
"name": "大同",
"parentId": 533,
"code": "061200000",
"isSelected": false
},
{
"id": 706,
"name": "东营",
"parentId": 544,
"code": "162000000",
"isSelected": false
},
{
"id": 627,
"name": "大庆",
"parentId": 537,
"code": "101300000",
"isSelected": false
},
{
"id": 604,
"name": "丹东",
"parentId": 535,
"code": "081300000",
"isSelected": false
},
{
"id": 842,
"name": "德宏",
"parentId": 554,
"code": "250600000",
"isSelected": false
},
{
"id": 107620,
"name": "儋州",
"parentId": 550,
"code": "223300000",
"isSelected": false
},
{
"id": 634,
"name": "大兴安岭",
"parentId": 537,
"code": "100600000",
"isSelected": false
}
],
"E": [
{
"id": 592,
"name": "鄂尔多斯",
"parentId": 534,
"code": "070900000",
"isSelected": false
},
{
"id": 741,
"name": "鄂州",
"parentId": 546,
"code": "181600000",
"isSelected": false
},
{
"id": 748,
"name": "恩施",
"parentId": 546,
"code": "180300000",
"isSelected": false
}
],
"F": [
{
"id": 768,
"name": "佛山",
"parentId": 548,
"code": "202000000",
"isSelected": false
},
{
"id": 681,
"name": "福州",
"parentId": 542,
"code": "140100000",
"isSelected": false
},
{
"id": 674,
"name": "阜阳",
"parentId": 541,
"code": "131000000",
"isSelected": false
},
{
"id": 602,
"name": "抚顺",
"parentId": 535,
"code": "081500000",
"isSelected": false
},
{
"id": 607,
"name": "阜新",
"parentId": 535,
"code": "081000000",
"isSelected": false
},
{
"id": 700,
"name": "抚州",
"parentId": 543,
"code": "150200000",
"isSelected": false
}
],
"G": [
{
"id": 763,
"name": "广州",
"parentId": 548,
"code": "200100000",
"isSelected": false
},
{
"id": 822,
"name": "贵阳",
"parentId": 553,
"code": "240100000",
"isSelected": false
},
{
"id": 697,
"name": "赣州",
"parentId": 543,
"code": "150500000",
"isSelected": false
},
{
"id": 787,
"name": "桂林",
"parentId": 549,
"code": "211200000",
"isSelected": false
},
{
"id": 792,
"name": "贵港",
"parentId": 549,
"code": "210700000",
"isSelected": false
},
{
"id": 814,
"name": "广安",
"parentId": 552,
"code": "230200000",
"isSelected": false
},
{
"id": 877,
"name": "甘南",
"parentId": 557,
"code": "281400000",
"isSelected": false
},
{
"id": 807,
"name": "广元",
"parentId": 552,
"code": "231900000",
"isSelected": false
},
{
"id": 820,
"name": "甘孜藏族自治州",
"parentId": 552,
"code": "230800000",
"isSelected": false
}
],
"H": [
{
"id": 653,
"name": "杭州",
"parentId": 540,
"code": "120100000",
"isSelected": false
},
{
"id": 664,
"name": "合肥",
"parentId": 541,
"code": "130100000",
"isSelected": false
},
{
"id": 773,
"name": "惠州",
"parentId": 548,
"code": "202500000",
"isSelected": false
},
{
"id": 622,
"name": "哈尔滨",
"parentId": 537,
"code": "100100000",
"isSelected": false
},
{
"id": 657,
"name": "湖州",
"parentId": 540,
"code": "122200000",
"isSelected": false
},
{
"id": 799,
"name": "海口",
"parentId": 550,
"code": "220100000",
"isSelected": false
},
{
"id": 587,
"name": "呼和浩特",
"parentId": 534,
"code": "070100000",
"isSelected": false
},
{
"id": 568,
"name": "邯郸",
"parentId": 532,
"code": "051300000",
"isSelected": false
},
{
"id": 643,
"name": "淮安",
"parentId": 539,
"code": "112500000",
"isSelected": false
},
{
"id": 108353,
"name": "海外",
"parentId": 108352,
"code": "350100000",
"isSelected": false
},
{
"id": 575,
"name": "衡水",
"parentId": 532,
"code": "050600000",
"isSelected": false
},
{
"id": 718,
"name": "菏泽",
"parentId": 544,
"code": "160200000",
"isSelected": false
},
{
"id": 752,
"name": "衡阳",
"parentId": 547,
"code": "191100000",
"isSelected": false
},
{
"id": 737,
"name": "黄石",
"parentId": 546,
"code": "181200000",
"isSelected": false
},
{
"id": 776,
"name": "河源",
"parentId": 548,
"code": "201400000",
"isSelected": false
},
{
"id": 667,
"name": "淮南",
"parentId": 541,
"code": "131400000",
"isSelected": false
},
{
"id": 724,
"name": "鹤壁",
"parentId": 545,
"code": "171600000",
"isSelected": false
},
{
"id": 612,
"name": "葫芦岛",
"parentId": 535,
"code": "080500000",
"isSelected": false
},
{
"id": 860,
"name": "汉中",
"parentId": 556,
"code": "270600000",
"isSelected": false
},
{
"id": 745,
"name": "黄冈",
"parentId": 546,
"code": "181100000",
"isSelected": false
},
{
"id": 669,
"name": "淮北",
"parentId": 541,
"code": "131600000",
"isSelected": false
},
{
"id": 760,
"name": "怀化",
"parentId": 547,
"code": "190300000",
"isSelected": false
},
{
"id": 672,
"name": "黄山",
"parentId": 541,
"code": "131900000",
"isSelected": false
},
{
"id": 837,
"name": "红河",
"parentId": 554,
"code": "251100000",
"isSelected": false
},
{
"id": 593,
"name": "呼伦贝尔",
"parentId": 534,
"code": "070800000",
"isSelected": false
},
{
"id": 893,
"name": "哈密",
"parentId": 560,
"code": "311400000",
"isSelected": false
},
{
"id": 795,
"name": "贺州",
"parentId": 549,
"code": "210400000",
"isSelected": false
},
{
"id": 796,
"name": "河池",
"parentId": 549,
"code": "210300000",
"isSelected": false
},
{
"id": 632,
"name": "黑河",
"parentId": 537,
"code": "100800000",
"isSelected": false
}
],
"J": [
{
"id": 702,
"name": "济南",
"parentId": 544,
"code": "160100000",
"isSelected": false
},
{
"id": 656,
"name": "嘉兴",
"parentId": 540,
"code": "122100000",
"isSelected": false
},
{
"id": 659,
"name": "金华",
"parentId": 540,
"code": "122400000",
"isSelected": false
},
{
"id": 769,
"name": "江门",
"parentId": 548,
"code": "202100000",
"isSelected": false
},
{
"id": 694,
"name": "九江",
"parentId": 543,
"code": "150800000",
"isSelected": false
},
{
"id": 709,
"name": "济宁",
"parentId": 544,
"code": "162300000",
"isSelected": false
},
{
"id": 582,
"name": "晋中",
"parentId": 533,
"code": "060700000",
"isSelected": false
},
{
"id": 782,
"name": "揭阳",
"parentId": 548,
"code": "200600000",
"isSelected": false
},
{
"id": 726,
"name": "焦作",
"parentId": 545,
"code": "171800000",
"isSelected": false
},
{
"id": 614,
"name": "吉林",
"parentId": 536,
"code": "091000000",
"isSelected": false
},
{
"id": 698,
"name": "吉安",
"parentId": 543,
"code": "150400000",
"isSelected": false
},
{
"id": 742,
"name": "荆门",
"parentId": 546,
"code": "181700000",
"isSelected": false
},
{
"id": 692,
"name": "景德镇",
"parentId": 543,
"code": "151000000",
"isSelected": false
},
{
"id": 605,
"name": "锦州",
"parentId": 535,
"code": "081200000",
"isSelected": false
},
{
"id": 744,
"name": "荆州",
"parentId": 546,
"code": "181900000",
"isSelected": false
},
{
"id": 629,
"name": "佳木斯",
"parentId": 537,
"code": "101100000",
"isSelected": false
},
{
"id": 580,
"name": "晋城",
"parentId": 533,
"code": "060900000",
"isSelected": false
},
{
"id": 872,
"name": "酒泉",
"parentId": 557,
"code": "280600000",
"isSelected": false
},
{
"id": 865,
"name": "嘉峪关",
"parentId": 557,
"code": "281300000",
"isSelected": false
},
{
"id": 866,
"name": "金昌",
"parentId": 557,
"code": "281200000",
"isSelected": false
},
{
"id": 107292,
"name": "济源",
"parentId": 545,
"code": "172000000",
"isSelected": false
}
],
"K": [
{
"id": 831,
"name": "昆明",
"parentId": 554,
"code": "250100000",
"isSelected": false
},
{
"id": 720,
"name": "开封",
"parentId": 545,
"code": "171200000",
"isSelected": false
},
{
"id": 891,
"name": "克拉玛依",
"parentId": 560,
"code": "311200000",
"isSelected": false
}
],
"L": [
{
"id": 574,
"name": "廊坊",
"parentId": 532,
"code": "050700000",
"isSelected": false
},
{
"id": 714,
"name": "临沂",
"parentId": 544,
"code": "162800000",
"isSelected": false
},
{
"id": 864,
"name": "兰州",
"parentId": 557,
"code": "280100000",
"isSelected": false
},
{
"id": 721,
"name": "洛阳",
"parentId": 545,
"code": "171300000",
"isSelected": false
},
{
"id": 716,
"name": "聊城",
"parentId": 544,
"code": "161500000",
"isSelected": false
},
{
"id": 642,
"name": "连云港",
"parentId": 539,
"code": "112400000",
"isSelected": false
},
{
"id": 810,
"name": "乐山",
"parentId": 552,
"code": "232200000",
"isSelected": false
},
{
"id": 786,
"name": "柳州",
"parentId": 549,
"code": "211300000",
"isSelected": false
},
{
"id": 663,
"name": "丽水",
"parentId": 540,
"code": "122800000",
"isSelected": false
},
{
"id": 847,
"name": "拉萨",
"parentId": 555,
"code": "260100000",
"isSelected": false
},
{
"id": 585,
"name": "临汾",
"parentId": 533,
"code": "060400000",
"isSelected": false
},
{
"id": 804,
"name": "泸州",
"parentId": 552,
"code": "231600000",
"isSelected": false
},
{
"id": 689,
"name": "龙岩",
"parentId": 542,
"code": "140400000",
"isSelected": false
},
{
"id": 677,
"name": "六安",
"parentId": 541,
"code": "130400000",
"isSelected": false
},
{
"id": 821,
"name": "凉山彝族自治州",
"parentId": 552,
"code": "230900000",
"isSelected": false
},
{
"id": 586,
"name": "吕梁",
"parentId": 533,
"code": "060300000",
"isSelected": false
},
{
"id": 729,
"name": "漯河",
"parentId": 545,
"code": "171000000",
"isSelected": false
},
{
"id": 843,
"name": "丽江",
"parentId": 554,
"code": "250500000",
"isSelected": false
},
{
"id": 823,
"name": "六盘水",
"parentId": 553,
"code": "240200000",
"isSelected": false
},
{
"id": 846,
"name": "临沧",
"parentId": 554,
"code": "250200000",
"isSelected": false
},
{
"id": 761,
"name": "娄底",
"parentId": 547,
"code": "190200000",
"isSelected": false
},
{
"id": 616,
"name": "辽源",
"parentId": 536,
"code": "090800000",
"isSelected": false
},
{
"id": 108424,
"name": "陵水黎族自治县",
"parentId": 550,
"code": "222700000",
"isSelected": false
},
{
"id": 904,
"name": "来宾",
"parentId": 549,
"code": "210200000",
"isSelected": false
}
],
"M": [
{
"id": 806,
"name": "绵阳",
"parentId": 552,
"code": "231800000",
"isSelected": false
},
{
"id": 668,
"name": "马鞍山",
"parentId": 541,
"code": "131500000",
"isSelected": false
},
{
"id": 812,
"name": "眉山",
"parentId": 552,
"code": "231300000",
"isSelected": false
},
{
"id": 774,
"name": "梅州",
"parentId": 548,
"code": "202600000",
"isSelected": false
},
{
"id": 771,
"name": "茂名",
"parentId": 548,
"code": "202300000",
"isSelected": false
},
{
"id": 631,
"name": "牡丹江",
"parentId": 537,
"code": "100900000",
"isSelected": false
}
],
"N": [
{
"id": 635,
"name": "南京",
"parentId": 539,
"code": "110100000",
"isSelected": false
},
{
"id": 654,
"name": "宁波",
"parentId": 540,
"code": "121900000",
"isSelected": false
},
{
"id": 691,
"name": "南昌",
"parentId": 543,
"code": "150100000",
"isSelected": false
},
{
"id": 785,
"name": "南宁",
"parentId": 549,
"code": "210100000",
"isSelected": false
},
{
"id": 641,
"name": "南通",
"parentId": 539,
"code": "112300000",
"isSelected": false
},
{
"id": 731,
"name": "南阳",
"parentId": 545,
"code": "170300000",
"isSelected": false
},
{
"id": 690,
"name": "宁德",
"parentId": 542,
"code": "140300000",
"isSelected": false
},
{
"id": 811,
"name": "南充",
"parentId": 552,
"code": "232300000",
"isSelected": false
},
{
"id": 809,
"name": "内江",
"parentId": 552,
"code": "232100000",
"isSelected": false
},
{
"id": 688,
"name": "南平",
"parentId": 542,
"code": "140500000",
"isSelected": false
}
],
"P": [
{
"id": 683,
"name": "莆田",
"parentId": 542,
"code": "141000000",
"isSelected": false
},
{
"id": 727,
"name": "濮阳",
"parentId": 545,
"code": "171900000",
"isSelected": false
},
{
"id": 693,
"name": "萍乡",
"parentId": 543,
"code": "150900000",
"isSelected": false
},
{
"id": 722,
"name": "平顶山",
"parentId": 545,
"code": "171400000",
"isSelected": false
},
{
"id": 609,
"name": "盘锦",
"parentId": 535,
"code": "080800000",
"isSelected": false
},
{
"id": 10163,
"name": "普洱",
"parentId": 554,
"code": "251700000",
"isSelected": false
},
{
"id": 871,
"name": "平凉",
"parentId": 557,
"code": "280700000",
"isSelected": false
},
{
"id": 803,
"name": "攀枝花",
"parentId": 552,
"code": "231500000",
"isSelected": false
}
],
"Q": [
{
"id": 703,
"name": "青岛",
"parentId": 544,
"code": "161700000",
"isSelected": false
},
{
"id": 685,
"name": "泉州",
"parentId": 542,
"code": "140800000",
"isSelected": false
},
{
"id": 778,
"name": "清远",
"parentId": 548,
"code": "200200000",
"isSelected": false
},
{
"id": 832,
"name": "曲靖",
"parentId": 554,
"code": "251600000",
"isSelected": false
},
{
"id": 567,
"name": "秦皇岛",
"parentId": 532,
"code": "051400000",
"isSelected": false
},
{
"id": 660,
"name": "衢州",
"parentId": 540,
"code": "122500000",
"isSelected": false
},
{
"id": 873,
"name": "庆阳",
"parentId": 557,
"code": "280500000",
"isSelected": false
},
{
"id": 623,
"name": "齐齐哈尔",
"parentId": 537,
"code": "101700000",
"isSelected": false
},
{
"id": 108419,
"name": "琼海",
"parentId": 550,
"code": "222200000",
"isSelected": false
},
{
"id": 830,
"name": "黔南",
"parentId": 553,
"code": "240900000",
"isSelected": false
},
{
"id": 827,
"name": "黔西南",
"parentId": 553,
"code": "240600000",
"isSelected": false
},
{
"id": 829,
"name": "黔东南",
"parentId": 553,
"code": "240800000",
"isSelected": false
},
{
"id": 108402,
"name": "潜江",
"parentId": 546,
"code": "180400000",
"isSelected": false
},
{
"id": 630,
"name": "七台河",
"parentId": 537,
"code": "101000000",
"isSelected": false
}
],
"R": [
{
"id": 712,
"name": "日照",
"parentId": 544,
"code": "162600000",
"isSelected": false
}
],
"S": [
{
"id": 6,
"name": "上海",
"parentId": 2,
"code": "020100000",
"isSelected": false
},
{
"id": 765,
"name": "深圳",
"parentId": 548,
"code": "201700000",
"isSelected": false
},
{
"id": 639,
"name": "苏州",
"parentId": 539,
"code": "112100000",
"isSelected": false
},
{
"id": 599,
"name": "沈阳",
"parentId": 535,
"code": "080100000",
"isSelected": false
},
{
"id": 565,
"name": "石家庄",
"parentId": 532,
"code": "050100000",
"isSelected": false
},
{
"id": 658,
"name": "绍兴",
"parentId": 540,
"code": "122300000",
"isSelected": false
},
{
"id": 767,
"name": "汕头",
"parentId": 548,
"code": "201900000",
"isSelected": false
},
{
"id": 648,
"name": "宿迁",
"parentId": 539,
"code": "113000000",
"isSelected": false
},
{
"id": 701,
"name": "上饶",
"parentId": 543,
"code": "151100000",
"isSelected": false
},
{
"id": 800,
"name": "三亚",
"parentId": 550,
"code": "221800000",
"isSelected": false
},
{
"id": 732,
"name": "商丘",
"parentId": 545,
"code": "170400000",
"isSelected": false
},
{
"id": 764,
"name": "韶关",
"parentId": 548,
"code": "201600000",
"isSelected": false
},
{
"id": 775,
"name": "汕尾",
"parentId": 548,
"code": "201500000",
"isSelected": false
},
{
"id": 738,
"name": "十堰",
"parentId": 546,
"code": "181300000",
"isSelected": false
},
{
"id": 753,
"name": "邵阳",
"parentId": 547,
"code": "191000000",
"isSelected": false
},
{
"id": 675,
"name": "宿州",
"parentId": 541,
"code": "130200000",
"isSelected": false
},
{
"id": 808,
"name": "遂宁",
"parentId": 552,
"code": "232000000",
"isSelected": false
},
{
"id": 730,
"name": "三门峡",
"parentId": 545,
"code": "170200000",
"isSelected": false
},
{
"id": 863,
"name": "商洛",
"parentId": 556,
"code": "270300000",
"isSelected": false
},
{
"id": 747,
"name": "随州",
"parentId": 546,
"code": "180200000",
"isSelected": false
},
{
"id": 633,
"name": "绥化",
"parentId": 537,
"code": "100700000",
"isSelected": false
},
{
"id": 684,
"name": "三明",
"parentId": 542,
"code": "140900000",
"isSelected": false
},
{
"id": 615,
"name": "四平",
"parentId": 536,
"code": "090900000",
"isSelected": false
},
{
"id": 108393,
"name": "石河子",
"parentId": 560,
"code": "310500000",
"isSelected": false
},
{
"id": 619,
"name": "松原",
"parentId": 536,
"code": "090500000",
"isSelected": false
},
{
"id": 581,
"name": "朔州",
"parentId": 533,
"code": "060800000",
"isSelected": false
},
{
"id": 849,
"name": "山南",
"parentId": 555,
"code": "260300000",
"isSelected": false
},
{
"id": 907,
"name": "三沙",
"parentId": 550,
"code": "220200000",
"isSelected": false
},
{
"id": 626,
"name": "双鸭山",
"parentId": 537,
"code": "101400000",
"isSelected": false
}
],
"T": [
{
"id": 7,
"name": "天津",
"parentId": 3,
"code": "030100000",
"isSelected": false
},
{
"id": 576,
"name": "太原",
"parentId": 533,
"code": "060100000",
"isSelected": false
},
{
"id": 662,
"name": "台州",
"parentId": 540,
"code": "122700000",
"isSelected": false
},
{
"id": 566,
"name": "唐山",
"parentId": 532,
"code": "051500000",
"isSelected": false
},
{
"id": 647,
"name": "泰州",
"parentId": 539,
"code": "112900000",
"isSelected": false
},
{
"id": 710,
"name": "泰安",
"parentId": 544,
"code": "162400000",
"isSelected": false
},
{
"id": 826,
"name": "铜仁",
"parentId": 553,
"code": "240500000",
"isSelected": false
},
{
"id": 670,
"name": "铜陵",
"parentId": 541,
"code": "131700000",
"isSelected": false
},
{
"id": 617,
"name": "通化",
"parentId": 536,
"code": "090700000",
"isSelected": false
},
{
"id": 868,
"name": "天水",
"parentId": 557,
"code": "281000000",
"isSelected": false
},
{
"id": 591,
"name": "通辽",
"parentId": 534,
"code": "071000000",
"isSelected": false
},
{
"id": 610,
"name": "铁岭",
"parentId": 535,
"code": "080700000",
"isSelected": false
},
{
"id": 855,
"name": "铜川",
"parentId": 556,
"code": "271100000",
"isSelected": false
},
{
"id": 107384,
"name": "天门",
"parentId": 546,
"code": "182100000",
"isSelected": false
}
],
"W": [
{
"id": 736,
"name": "武汉",
"parentId": 546,
"code": "180100000",
"isSelected": false
},
{
"id": 636,
"name": "无锡",
"parentId": 539,
"code": "111800000",
"isSelected": false
},
{
"id": 655,
"name": "温州",
"parentId": 540,
"code": "122000000",
"isSelected": false
},
{
"id": 708,
"name": "潍坊",
"parentId": 544,
"code": "162200000",
"isSelected": false
},
{
"id": 665,
"name": "芜湖",
"parentId": 541,
"code": "131200000",
"isSelected": false
},
{
"id": 711,
"name": "威海",
"parentId": 544,
"code": "162500000",
"isSelected": false
},
{
"id": 890,
"name": "乌鲁木齐",
"parentId": 560,
"code": "310100000",
"isSelected": false
},
{
"id": 858,
"name": "渭南",
"parentId": 556,
"code": "270800000",
"isSelected": false
},
{
"id": 788,
"name": "梧州",
"parentId": 549,
"code": "211100000",
"isSelected": false
},
{
"id": 838,
"name": "文山",
"parentId": 554,
"code": "251000000",
"isSelected": false
},
{
"id": 108425,
"name": "文昌",
"parentId": 550,
"code": "222800000",
"isSelected": false
},
{
"id": 108423,
"name": "万宁",
"parentId": 550,
"code": "222600000",
"isSelected": false
},
{
"id": 589,
"name": "乌海",
"parentId": 534,
"code": "071200000",
"isSelected": false
},
{
"id": 596,
"name": "乌兰察布",
"parentId": 534,
"code": "070500000",
"isSelected": false
}
],
"X": [
{
"id": 854,
"name": "西安",
"parentId": 556,
"code": "270100000",
"isSelected": false
},
{
"id": 682,
"name": "厦门",
"parentId": 542,
"code": "141100000",
"isSelected": false
},
{
"id": 637,
"name": "徐州",
"parentId": 539,
"code": "111900000",
"isSelected": false
},
{
"id": 725,
"name": "新乡",
"parentId": 545,
"code": "171700000",
"isSelected": false
},
{
"id": 569,
"name": "邢台",
"parentId": 532,
"code": "051200000",
"isSelected": false
},
{
"id": 740,
"name": "襄阳",
"parentId": 546,
"code": "181500000",
"isSelected": false
},
{
"id": 857,
"name": "咸阳",
"parentId": 556,
"code": "270900000",
"isSelected": false
},
{
"id": 878,
"name": "西宁",
"parentId": 558,
"code": "290100000",
"isSelected": false
},
{
"id": 105794,
"name": "香港",
"parentId": 561,
"code": "320100000",
"isSelected": false
},
{
"id": 733,
"name": "信阳",
"parentId": 545,
"code": "170500000",
"isSelected": false
},
{
"id": 728,
"name": "许昌",
"parentId": 545,
"code": "171100000",
"isSelected": false
},
{
"id": 743,
"name": "孝感",
"parentId": 546,
"code": "181800000",
"isSelected": false
},
{
"id": 751,
"name": "湘潭",
"parentId": 547,
"code": "191200000",
"isSelected": false
},
{
"id": 746,
"name": "咸宁",
"parentId": 546,
"code": "181000000",
"isSelected": false
},
{
"id": 108403,
"name": "仙桃",
"parentId": 546,
"code": "180500000",
"isSelected": false
},
{
"id": 695,
"name": "新余",
"parentId": 543,
"code": "150700000",
"isSelected": false
},
{
"id": 680,
"name": "宣城",
"parentId": 541,
"code": "130700000",
"isSelected": false
},
{
"id": 594,
"name": "兴安盟",
"parentId": 534,
"code": "070700000",
"isSelected": false
},
{
"id": 840,
"name": "西双版纳",
"parentId": 554,
"code": "250800000",
"isSelected": false
},
{
"id": 595,
"name": "锡林郭勒盟",
"parentId": 534,
"code": "070600000",
"isSelected": false
},
{
"id": 762,
"name": "湘西土家族苗族自治州",
"parentId": 547,
"code": "191400000",
"isSelected": false
},
{
"id": 584,
"name": "忻州",
"parentId": 533,
"code": "060500000",
"isSelected": false
}
],
"Y": [
{
"id": 707,
"name": "烟台",
"parentId": 544,
"code": "162100000",
"isSelected": false
},
{
"id": 645,
"name": "扬州",
"parentId": 539,
"code": "112700000",
"isSelected": false
},
{
"id": 886,
"name": "银川",
"parentId": 559,
"code": "300100000",
"isSelected": false
},
{
"id": 644,
"name": "盐城",
"parentId": 539,
"code": "112600000",
"isSelected": false
},
{
"id": 813,
"name": "宜宾",
"parentId": 552,
"code": "231200000",
"isSelected": false
},
{
"id": 739,
"name": "宜昌",
"parentId": 546,
"code": "181400000",
"isSelected": false
},
{
"id": 583,
"name": "运城",
"parentId": 533,
"code": "060600000",
"isSelected": false
},
{
"id": 699,
"name": "宜春",
"parentId": 543,
"code": "150300000",
"isSelected": false
},
{
"id": 777,
"name": "阳江",
"parentId": 548,
"code": "201300000",
"isSelected": false
},
{
"id": 754,
"name": "岳阳",
"parentId": 547,
"code": "190900000",
"isSelected": false
},
{
"id": 861,
"name": "榆林",
"parentId": 556,
"code": "270500000",
"isSelected": false
},
{
"id": 793,
"name": "玉林",
"parentId": 549,
"code": "210600000",
"isSelected": false
},
{
"id": 759,
"name": "永州",
"parentId": 547,
"code": "190400000",
"isSelected": false
},
{
"id": 606,
"name": "营口",
"parentId": 535,
"code": "081100000",
"isSelected": false
},
{
"id": 816,
"name": "雅安",
"parentId": 552,
"code": "230400000",
"isSelected": false
},
{
"id": 757,
"name": "益阳",
"parentId": 547,
"code": "190600000",
"isSelected": false
},
{
"id": 621,
"name": "延边",
"parentId": 536,
"code": "090300000",
"isSelected": false
},
{
"id": 833,
"name": "玉溪",
"parentId": 554,
"code": "251500000",
"isSelected": false
},
{
"id": 578,
"name": "阳泉",
"parentId": 533,
"code": "061100000",
"isSelected": false
},
{
"id": 859,
"name": "延安",
"parentId": 556,
"code": "270700000",
"isSelected": false
},
{
"id": 696,
"name": "鹰潭",
"parentId": 543,
"code": "150600000",
"isSelected": false
},
{
"id": 901,
"name": "伊犁",
"parentId": 560,
"code": "310200000",
"isSelected": false
},
{
"id": 783,
"name": "云浮",
"parentId": 548,
"code": "200700000",
"isSelected": false
},
{
"id": 628,
"name": "伊春",
"parentId": 537,
"code": "101200000",
"isSelected": false
}
],
"Z": [
{
"id": 719,
"name": "郑州",
"parentId": 545,
"code": "170100000",
"isSelected": false
},
{
"id": 766,
"name": "珠海",
"parentId": 548,
"code": "201800000",
"isSelected": false
},
{
"id": 780,
"name": "中山",
"parentId": 548,
"code": "200400000",
"isSelected": false
},
{
"id": 704,
"name": "淄博",
"parentId": 544,
"code": "161800000",
"isSelected": false
},
{
"id": 772,
"name": "肇庆",
"parentId": 548,
"code": "202400000",
"isSelected": false
},
{
"id": 687,
"name": "漳州",
"parentId": 542,
"code": "140600000",
"isSelected": false
},
{
"id": 646,
"name": "镇江",
"parentId": 539,
"code": "112800000",
"isSelected": false
},
{
"id": 770,
"name": "湛江",
"parentId": 548,
"code": "202200000",
"isSelected": false
},
{
"id": 824,
"name": "遵义",
"parentId": 553,
"code": "240300000",
"isSelected": false
},
{
"id": 735,
"name": "驻马店",
"parentId": 545,
"code": "170700000",
"isSelected": false
},
{
"id": 750,
"name": "株洲",
"parentId": 547,
"code": "191300000",
"isSelected": false
},
{
"id": 571,
"name": "张家口",
"parentId": 532,
"code": "051000000",
"isSelected": false
},
{
"id": 734,
"name": "周口",
"parentId": 545,
"code": "170600000",
"isSelected": false
},
{
"id": 579,
"name": "长治",
"parentId": 533,
"code": "061000000",
"isSelected": false
},
{
"id": 705,
"name": "枣庄",
"parentId": 544,
"code": "161900000",
"isSelected": false
},
{
"id": 818,
"name": "资阳",
"parentId": 552,
"code": "230600000",
"isSelected": false
},
{
"id": 661,
"name": "舟山",
"parentId": 540,
"code": "122600000",
"isSelected": false
},
{
"id": 802,
"name": "自贡",
"parentId": 552,
"code": "231400000",
"isSelected": false
},
{
"id": 835,
"name": "昭通",
"parentId": 554,
"code": "251300000",
"isSelected": false
},
{
"id": 906,
"name": "中卫",
"parentId": 559,
"code": "300500000",
"isSelected": false
},
{
"id": 870,
"name": "张掖",
"parentId": 557,
"code": "280800000",
"isSelected": false
},
{
"id": 756,
"name": "张家界",
"parentId": 547,
"code": "190700000",
"isSelected": false
}
]
}
},
"rows": [
]
}
}
测试代码
# jsonpath_lagou.py
import urllib2
import jsonpath
import json
url = 'http://www.lagou.com/lbs/getAllCitySearchLabels.json'
request =urllib2.Request(url)
response = urllib2.urlopen(request)
html = response.read()
# 把json格式字符串转换成python对象
jsonobj = json.loads(html)
# 从根节点开始,匹配name节点
citylist = jsonpath.jsonpath(jsonobj,'$..name')
print citylist
print type(citylist)
fp = open('city.json','w')
content = json.dumps(citylist, ensure_ascii=False)
print content
fp.write(content.encode('utf-8'))
fp.close()
注意事项:
json.loads() 是把 Json格式字符串解码转换成Python对象,如果在json.loads的时候出错,要注意被解码的Json字符的编码,如果传入的字符串的编码不是UTF-8的话,需要指定字符编码的参数encoding
如:
dataDict = json.loads(jsonStrGBK);
jsonStrGBK是JSON字符串,假设其编码本身是非UTF-8的话而是GBK 的,那么上述代码会导致出错,改为对应的:
dataDict = json.loads(jsonStrGBK, encoding="GBK");
附:字符串编码转换
这是中国程序员最苦逼的地方,什么乱码之类的几乎都是由汉字引起的。 其实编码问题很好搞定,只要记住一点:
任何平台的任何编码 都能和 Unicode 互相转换
UTF-8 与 GBK 互相转换,那就先把UTF-8转换成Unicode,再从Unicode转换成GBK,反之同理。
# 这是一个 UTF-8 编码的字符串
utf8Str = "你好地球"
# 1. 将 UTF-8 编码的字符串 转换成 Unicode 编码
unicodeStr = utf8Str.decode("UTF-8")
# 2. 再将 Unicode 编码格式字符串 转换成 GBK 编码
gbkData = unicodeStr.encode("GBK")
# 1. 再将 GBK 编码格式字符串 转化成 Unicode
unicodeStr = gbkData.decode("gbk")
# 2. 再将 Unicode 编码格式字符串转换成 UTF-8
utf8Str = unicodeStr.encode("UTF-8")
decode的作用是将其他编码的字符串转换成 Unicode 编码;encode的作用是将 Unicode 编码转换成其他编码的字符串。