How can I print specific values from a json file with python?

Question:

I’m new using python and I would like to know how can I print some values from my json file using python, the following is my json file:

{
    "igt@gem_reloc_overflow@single-overflow": {
        "__type__": "TestResult",
        "command": "/home/gfx/intel-graphics/intel-gpu-tools/tests/gem_reloc_overflow --run-subtest single-overflow",
        "dmesg": "",
        "environment": "PIGLIT_PLATFORM="mixed_glx_egl" PIGLIT_SOURCE_DIR="/home/gfx/intel-graphics/intel-gpu-tools/piglit"",
        "err": "(gem_reloc_overflow:19562) CRITICAL: Test assertion failure function reloc_tests, file gem_reloc_overflow.c:260:n(gem_reloc_overflow:19562) CRITICAL: Failed assertion: __gem_execbuf(fd, &execbuf) == -14n(gem_reloc_overflow:19562) CRITICAL: error: -22 != -14nSubtest single-overflow failed.n**** DEBUG ****n(gem_reloc_overflow:19562) DEBUG: relocation_count=4294967295n(gem_reloc_overflow:19562) CRITICAL: Test assertion failure function reloc_tests, file gem_reloc_overflow.c:260:n(gem_reloc_overflow:19562) CRITICAL: Failed assertion: __gem_execbuf(fd, &execbuf) == -14n(gem_reloc_overflow:19562) CRITICAL: error: -22 != -14n****  END  ****n",
        "exception": null,
        "out": "IGT-Version: 1.14-g1e9a3ac (x86_64) (Linux: 4.6.0-rc4-drm-intel-nightly-ww17-commit-1e81bac+ x86_64)nStack trace:n  #0 [__igt_fail_assert+0x101]n  #1 [reloc_tests+0x6d6]n  #2 [<unknown>+0x6d6]nSubtest single-overflow: FAIL (8.469s)n",
        "pid": 19562,
        "result": "fail",
        "returncode": 99,
        "subtests": {
            "__type__": "Subtests"
        },
        "time": {
            "__type__": "TimeAttribute",
            "end": 1462072402.5360818,
            "start": 1462072393.7328644
        },
        "traceback": null
    }
}

The value that I need is "result : fail".

So far I have this code:

import json

with open("9.json") as json_file:
json_data = json.load(json_file)
print(json_data)
Asked By: shaveax

||

Answers:

The json.load function returns a dictionary (an object of type dict).

A dictionary associates keys with vlues. To access values inside the dictionary, you can use this syntax:

value = dictionary[key]

In your particular case:

result = json_data['result']
Answered By: slezica
json_data["igt@gem_reloc_overflow@single-overflow"]["result"]

this will print result

Answered By: backtrack

Give this a shot!

for key, value in json_data.iteritems():
    result = value['result']

print result

UPDATE (for question in comments):
If you have multiple files and want to store all of the info at once – try throwing it all into a dictionary. This can vary depending on what you want the key to be. But try this (this will create a dicitonary of {json_key: result_value}:

all_results = {}
json_file_list = ['file_1.json', 'file_2.json']
for file in json_file_list:
    with open(file) as json_file:
        json_data = json.load(json_file)
        for key, value in json_data.iteritems():
            if 'result' in value:
                all_results[key] = value['result']
return all_results
Answered By: tknickman

The json data is stored as a python dictionary.

Hence you can access the value of “result” as follows:

json_data["igt@gem_reloc_overflow@single-overflow"]["result"]

W.R.T your code:

import json

with open("9.json") as json_file:
        json_data = json.load(json_file)


print(json_data["igt@gem_reloc_overflow@single-overflow"]["result"])
Answered By: Nihal Harish
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.