有没有办法用Python访问第n个JSON元素?

时间:2019-04-08 00:13:14

标签: python json

例如,我有此JSON:

"products": {
    "5117293": {
        "id": 5117293,
        "brandId": 12,
        "price": "12$"
        "mediaById": {
            "104290597": {
                "id": "17_104290597",
                "group": "swatch",
                "type": "image",
                "src": "https://foo.com/image1.jpg"
              },
            "104725944": {
                "id": "7_104725947",
                "group": "main",
                "type": "image",
                "src": "https://foo.com/image2.jpg"
            }
        },
}

假设我要访问第二张图片 image2.jpg 。如何在不知道ID的情况下使用Python JSON库执行此操作? (在此示例中访问第二个元素)。这是我尝试过的并且显然失败的方法(编辑:我意识到它不起作用,我只想以类似的方式)。

image = json_content['products']["5117293"]["mediaById"][1]["src"]

这将显示一个关键错误。

3 个答案:

答案 0 :(得分:1)

要获取基于“第二”索引的顺序,可以使用以下顺序:

nth = 2
nth_image_id = json_content['products']["5117293"]["mediaById"].keys()[nth - 1]
image = json_content['products']["5117293"]["mediaById"][nth_image_id]["src"]

正如其他人在评论中指出的那样,顺序可能没有很好地定义。但是,在这种情况下,如果您知道ID号将一直在增加,则可以使用它来获取第n个元素,换句话说,它是定义良好的“ nth”。

nth = 2
# determine the nth id
image_ids = json_content['products']["5117293"]["mediaById"].keys()
image_ids = [int(x) for x in image_ids]
image_ids.sort()
nth_image_id = image_ids[nth - 1]
# pull the nth image
image = json_content['products']["5117293"]["mediaById"][nth_image_id]["src"]

答案 1 :(得分:1)

您可以这样做:

import json

j = """
{
    "products": {
        "5117293": {
            "id": 5117293,
            "brandId": 12,
            "price": "12$",
            "mediaById": {
                "104290597": {
                    "id": "17_104290597",
                    "group": "swatch",
                    "type": "image",
                    "src": "https://foo.com/image1.jpg"
                },
                "104725944": {
                    "id": "7_104725947",
                    "group": "main",
                    "type": "image",
                    "src": "https://foo.com/image2.jpg"
                }
            }
        }
    }
}
"""

d = json.loads(j)
print(list(d['products']['5117293']['mediaById'].items())[1][1]['src']) #for the second item
>>> https://foo.com/image2.jpg
#print(list(d['products']['5117293']['mediaById'].items())[0][1]['src']) #for the first item

答案 2 :(得分:0)

我设法通过使用临时列表来获取媒体ID并访问该列表的第二个元素。

images = json_content['products']["5117293"]['mediaById']
imagesList = []
for imageID in images:
    imagesList.append(imageID)
image = prod['mediaById'][imagesList[1]]['src']