Python,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",
        },
    ]
}

需要模糊搜索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,"辽宁")