簡體   English   中英

如何從 JSON 中獲取值

[英]How to get a value from JSON

這是我第一次使用 JSON,我試圖從下面的 JSON 中提取url

{
    "name": "The_New11d112a_Company_Name",
    "sections": [
        {
            "name": "Products",
            "payload": [
                {
                    "id": 1,
                    "name": "TERi Geriatric Patient Skills Trainer,
                    "type": "string"
                }
            ]
        },
        {
            "name": "Contact Info",
            "payload": [
                {
                    "id": 1,
                    "name": "contacts",
                    "url": "https://www.a3bs.com/catheterization-kits-8000892-3011958-3b-scientific,p_1057_31043.html",
                    "contacts": [
                        {
                        "name": "User",
                        "email": "Company Email",
                        "phone": "Company PhoneNumber"
                    }
                ],
                "type": "contact"
            }
        ]
    }
],
"tags": [
    "Male",
    "Airway"
],
"_id": "0e4cd5c6-4d2f-48b9-acf2-5aa75ade36e1"

}

我已經能夠通過訪問description_id

data = json.loads(line)
        if 'xpath' in data:
            xpath = data["_id"]
            description = data["sections"][0]["payload"][0]["description"]

但是,我似乎無法找到訪問url 另外一個問題,我已經是有可能在其他項目sections ,這使得置入到Contact Info非首發。

希望這可以幫助:

import json

with open("test.json", "r") as f:
    json_out = json.load(f)
    for i in json_out["sections"]:
        for j in i["payload"]:
            for key in j:
                if "url" in key:
                    print(key, '->', j[key])

我認為您的JSON已損壞,應該是這樣。

{
    "name": "The_New11d112a_Company_Name",
    "sections": [
        {
            "name": "Products",
            "payload": [
                {
                    "id": 1,
                    "name": "TERi Geriatric Patient Skills Trainer",
                    "type": "string"
                }
            ]
        },
        {
            "name": "Contact Info",
            "payload": [
                {
                    "id": 1,
                    "name": "contacts",
                    "url": "https://www.a3bs.com/catheterization-kits-8000892-3011958-3b-scientific,p_1057_31043.html",
                    "contacts": [
                        {
                        "name": "User",
                        "email": "Company Email",
                        "phone": "Company PhoneNumber"
                    }
                ],
                "type": "contact"
            }
        ]
    }
],
"tags": [
    "Male",
    "Airway"
],
"_id": "0e4cd5c6-4d2f-48b9-acf2-5aa75ade36e1"
}

您可以在http://json.parser.online.fr/上查看。

如果你想獲取 url 的值。

import json
j = json.load(open('yourJSONfile.json'))
print(j['sections'][1]['payload'][0]['url'])

我認為值得編寫一個簡短的函數來獲取url(s) ,並決定是否使用返回列表中第一個找到的url ,或者如果您的數據中沒有可用的 url,則跳過處理。

該方法應如下所示:

def extract_urls(data):
    payloads = []
    for section in data['sections']:
        payloads += section.get('payload') or []

    urls = [x['url'] for x in payloads if 'url' in x]

    return urls

這應該打印出 URL

import json
# open json file to read
with open('test.json','r') as f:
    # load json, parameter as json text (file contents)
    data = json.loads(f.read())
    # after observing format of JSON data, the location of the URL key
    # is determined and the data variable is manipulated to extract the value
    print(data['sections'][1]['payload'][0]['url'])

'url' 鍵的確切位置:

數組的第一個(位置)是鍵“sections”的值

在數組值里面,有一個字典,key 'payload' 包含一個數組

在數組的第 0 個(位置)是一個帶有鍵“url”的字典


在測試我的解決方案時,我注意到提供的 json 有缺陷,在修復 json 缺陷(3)后,我最終得到了這個。

{
"name": "The_New11d112a_Company_Name",
"sections": [
    {
        "name": "Products",
        "payload": [
            {
                "id": 1,
                "name": "TERi Geriatric Patient Skills Trainer",
                "type": "string"
            }
        ]
    },
    {
        "name": "Contact Info",
        "payload": [
            {
                "id": 1,
                "name": "contacts",
                "url": "https://www.a3bs.com/catheterization-kits-8000892-3011958-3b-scientific,p_1057_31043.html",
                "contacts": [
                    {
                    "name": "User",
                    "email": "Company Email",
                    "phone": "Company PhoneNumber"
                }
            ],
            "type": "contact"
        }
    ]
}
],
"tags": [
"Male",
"Airway"
],
"_id": "0e4cd5c6-4d2f-48b9-acf2-5aa75ade36e1"}

在使用 Vincent55 提供的 JSON 之后。 我做了一個帶有異常處理和某些假設的工作代碼。

工作代碼:

## Assuming that the target data is always under sections[i].payload
from json import loads
line = open("data.json").read()
data = loads(line)["sections"]
for x in data:
    try:
        # With assumption that there is only one payload
        if x["payload"][0]["url"]:
            print(x["payload"][0]["url"])
    except KeyError:
        pass

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM