Извлечь ключ из файла JSON, когда значения известны (Groovy или Python) - PullRequest
0 голосов
/ 17 апреля 2019

Есть ли способ извлечь ключ из JSON, если я знаю только одно значение?(В groovy или python) Пример: я знаю значение "_number" и мне нужен ключ.Допустим, известный _number равен 2, и в качестве вывода я должен получить dsf34f43f34f34f

{
  "id": "8e37ecadf4908f79d58080e6ddbc",
  "project": "some_project",
  "branch": "master",
  "current_revision": "3rtgfgdfg2fdsf",
  "revisions": {
    "43g5g534534rf34f43f": {
      "_number": 3,
      "created": "2019-04-16 09:03:07.459000000",
      "uploader": {
        "_account_id": 4
      },
      "description": "Rebase"
    },
    "dsf34f43f34f34f": {
      "_number": 2,
      "created": "2019-04-02 10:54:14.682000000",
      "uploader": {
        "_account_id": 2
      },
      "description": "Rebase"
    }
  }
}

Ответы [ 3 ]

1 голос
/ 17 апреля 2019

С Groovy:

def json = new groovy.json.JsonSlurper().parse("x.json" as File)
println(json.revisions.findResult{ it.value._number==2 ? it.key : null })
// => dsf34f43f34f34f
0 голосов
/ 17 апреля 2019

с использованием dict-comprehension:

print({k for k,v in d['revisions'].items() if v.get('_number') == 2})

ВЫХОД :

{'dsf34f43f34f34f'}
0 голосов
/ 17 апреля 2019

Python 3: (при условии, что данные сохранены в data.json):

import json

with open('data.json') as f:
    json_data = json.load(f)

for rev, revdata in json_data['revisions'].items():
    if revdata['_number'] == 2:
        print(rev)

Печатает все обороты, где _number равно 2.

...