example_json =
{
"Data": [
{
"time": "2021-08-09 16:41:01",
"text": "例子1例子1。",
"title": "中国辽宁大连",
"id": "11111111111",
},
{
"time": "2021-08-09 16:56:01",
"text": "例子2例子2。",
"title": "辽宁沈阳",
"id": "2222222222222",
},
{
"time": "2021-08-09 16:57:02",
"text": "例子3例子3。",
"title": "中国山西太原",
"id": "555555555555",
},
]
}
需要模糊搜索title含辽宁的内容,接着获取位置为[0],[1]
from jsonpath import jsonpath
example_json = {
"Data": [
{
"time": "2021-08-09 16:41:01",
"text": "例子1例子1。",
"title": "中国辽宁大连",
"id": "11111111111",
},
{
"time": "2021-08-09 16:56:01",
"text": "例子2例子2。",
"title": "辽宁沈阳",
"id": "2222222222222",
},
{
"time": "2021-08-09 16:57:02",
"text": "例子3例子3。",
"title": "中国山西太原",
"id": "555555555555",
},
]
}
res = jsonpath(example_json, "$.Data[*].title")
print([res.index(x) for x in res if '辽宁' in x])
# 结果
[0, 1]
# 简写方案
print([res.index(x) for x in jsonpath(example_json, "$.Data[*].title") if '辽宁' in x])
利用正则表达式进行字符串模仿匹配
jsonpath返回的是value,而非一个node,所以这里用jsonpath并不合适
如果json的格式的确定的,那么有更简单的方式进行处理
print([i for i, data in enumerate(example_json["Data"]) if "辽宁" in data["title"]])
如果json格式复杂,甚至是动态的,一般多加一个for就好了,或者对json进行预处理,然后就能够直接找到了
function searchTitle(json,keyWord) {
list = json.Data;
if (!(list instanceof Array)) {
return;
}
var len = list.length;
var arr = [];
for (var i = 0; i < len; i++) {
if (list[i]['title'].indexOf(keyWord) >= 0) {
arr.push(i);
}
}
return arr;
}
var example_json =
{
"Data": [
{
"time": "2021-08-09 16:41:01",
"text": "例子1例子1。",
"title": "中国辽宁大连",
"id": "11111111111",
},
{
"time": "2021-08-09 16:56:01",
"text": "例子2例子2。",
"title": "辽宁沈阳",
"id": "2222222222222",
},
{
"time": "2021-08-09 16:57:02",
"text": "例子3例子3。",
"title": "中国山西太原",
"id": "555555555555",
},
]
}
// 调用方法:
var test = searchByIndexOf(example_json,"辽宁")