pyJsonEdit
Edit parts of inconsistently formatted json.
It's just a bit slower that doing this by hand!
matcher
Now you can easly select nodes in json tree
syntax:
selector | action | node type | comments |
---|---|---|---|
* | select all items in current node | - | |
[n] | select n-th item of curent node | array | |
{n} | select n-th item of curent node | object | |
key | select node chilld by name | object | |
"key" | select node chilld by name | object | |
> | mark current node as seleced | - | |
a=b | check if current node has child 'a' with value 'b' | object | |
:before | add text before selected node | - | must at end of pattern |
:after | add text after selected node | - | must at end of pattern |
example 1:
key > [0]
this pattern will match one element by:
- selecting "key" element in root node (assuring that is an object)
- select first element in it (assumintg its an array)
example 2:
name > *
this pattern will match multiple elements by:
- selecting "name" element in root node (assuring that is an object)
- select all element in it
how to install
pip install --upgrade pyjsonedit
python module
import pyjsonedit
comand line - mark
$ pyjsonedit-mask --help
Usage: pyjsonedit-mask [OPTIONS] PATTERN [JSONS]...
Select and mask parts of json
Options:
--symbol TEXT
-i, --insert save changes to file
--help Show this message and exit.
example:
pyjsonedit-mask "pass" "{'pass':123}"
{'pass':XXX}
comand line - modify
$ pyjsonedit-modify --help
Usage: pyjsonedit-modify [OPTIONS] PATTERN TEMPLATE [JSONS]...
select and modify parts of json
Options:
-i, --insert save changes to file
--help Show this message and exit.
example 1: simple string
pyjsonedit-modify "pass" 'P@$W&$d' "{'pass':123}"
{'pass':P@$W&$d}
example 2: python code:
file /home/dave/somefile.py
#!/usr/bin/python3
def modify(node,ctx):
return "'<"+str(1)+">'"
node - matched node
ctx - context in witch node was matched: file_name & match_nr
pyjsonedit-modify "*" /home/dave/somefile.py "{'a':1}"
{'a':'<1>'}
example: mask multiple nodes
$ pyjsonedit-mask **"quiz > * > q1 >*"** DOC/example.json
{
"quiz": {
"sport": {
"q1": {
"question": XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,
"options": XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,
"answer": XXXXXXXXXXXXXXX
}
},
"maths": {
"q1": {
"question": XXXXXXXXXXX,
"options": XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,
"answer": XXXX
},
"q2": {
"question": "12 - 8 = ?",
"options": [
"1",
"2",
"3",
"4"
],
"answer": "4"
}
}
}
}
example: mask selected nodes
$ import pyjsonedit
$ pyjsonedit.string_match_mark("{'pass':123}","pass")
{'pass':XXX}