🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
Sign inDemoInstall
Socket

eval-jsonpath-elam

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

eval-jsonpath-elam

Given a json value, this method will generate an eval jsonPath string for Python or dot notation string for Java/Javascript

0.0.1
PyPI
Maintainers
1

Get eval() method Jsonpath by json value

Search for the (string, int, float, bool) value in a json object, and return the jsonpath in a string formatted to use in eval() method.

For example: import json from eval_jsonpath_elam.evalpath import get_jsonpath_by_key

json_data = { 
    "objectKeyNameList": [ 
        {"someBoolKey": False },
        {"someFloatKey": 123456.34 },
        {"someIntKey": 7890 },
        {"someStrKey": "my_search_string" }
    ]
}

json_object = json.loads( json.dumps( json_data ) )
eval_string = get_jsonpath_by_key(json_object, "my_search_string") 
print( eval_string ) # "['objectKeyNameList'][3]['someStrKey']"
print( eval( "json_object" + eval_string ) ) # "my_search_string"

Optional parameters

Property NameValuesDoc
dot_notationfalse or truedefault to False; this allows to be compatible to Python (ie: "['someObj']['Array'][3]['obj1']['key'][2]['prop']"). When set to True; allows string to be returned to be compatible to Java/Javascript (ie: "someObj.Array[3].obj1.key[2].prop")
contains_stringfalse or truedefault to True; this searches for all occurances of the search string. When set to False; will only find the first occurance of the search string, int, float, or bool

Note: bool, int, float, complex data types will be automatically converted to strings during search. returned_json_path_string will return a string of the json path if found, otherwise the None object will be returned. Search string is case sensitive.

License

AGPLv3

Authors

  • Eric Lam

The following is example code tested in Windows 11 with Python 3.11.4:

import json

# either import this:
from eval_jsonpath_elam import evalpath
# or import this:
from eval_jsonpath_elam.evalpath import get_jsonpath_by_key

json_data = {
    "alpha": ["aaa", "bbb", "ccc"],
    "dimensions": {"length": "112", "width": "103", "height": "42", "once": "thing1"},
    "meta_data": [
        {
            "id": 11089769,
            "key1": "imported_gallery_files",
            "value": [
                "https://abc.com/unnamed-3.jpg",
                "https://abc.com/unnamed-2.jpg",
                "https://abc.com/unnamed-4.jpg",
            ],
        },
        {
            "id": 11089779,
            "key2": "imported_gallery_files2",
            "value": [
                "https://abc.com/unnamed-5.jpg",
                "https://abc.com/unnamed-6.jpg",
                "https://abc.com/unnamed-7.jpg",
            ],
            "value2": {
                "branch1": ["thing0"],
                "branch2": [
                    {"branch2_0": "thing1"},
                    {"branch2_1": "thing2"},
                    {"branch2_2": "thing3"},
                ],
            },
        },
    ],
}


# used to just print the list of strings using eval(json_path_string)
def print_python_json(x):
    for v in x:
        print(f'data{v} = {eval("data" + v)}')
    print()

# load json into object
data = json.loads(json.dumps(json_data))

# find the key "thing" in json, and return the json path in eval string format
path_str = get_jsonpath_by_key(data, "thing")
print_python_json(path_str)
path_str = evalpath.get_jsonpath_by_key(data, 42)
print_python_json(path_str1)

path_str = get_jsonpath_by_key(data, 42, dot_notation=True)
print(path_str[0])
path_str = get_jsonpath_by_key(data, 11089769)
print_python_json(path_str)

path_str = get_jsonpath_by_key(data, "thing1", contains_string=False)
print_python_json(path_str)
path_str = get_jsonpath_by_key(data, "imported_gallery_files", contains_string=False)
print_python_json(path_str)
path_str = get_jsonpath_by_key(data, "imported_gallery_files", contains_string=True)
print_python_json(path_str)

Keywords

return

FAQs

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts