【问题标题】:Get the required value from complex JSON data从复杂的 JSON 数据中获取所需的值
【发布时间】:2016-05-16 07:22:58
【问题描述】:

从下面的 JSON 响应中,我只想获取 bkg 键的值并将所有这些值附加到一个列表中。

根据这些特定数据,我希望最终结果为 [244332, 1066459, 1354690, 1300150, 472468, 300420, 722942]

    { u 'data': {
        u '244332': {
            u 'hotel_data_node': {
                u '_id': 919824916605752258 L,
                u 'ids': {
                    u 'bkg': [u '244332'],
                    u 'voy': 9174725345440343760 L
                },
                u 'vendor_info': {
                    u 'vendor_id': u '244332',
                    u 'vendor': u 'bkg'
                }
            }
        },

        u '1066459': {
            u 'hotel_data_node': {
                u '_id': 2735067627304153118 L,
                u 'ids': {
                    u 'bkg': [u '1066459'],
                    u 'voy': 6032400126419907661 L
                },
                u 'vendor_info': {
                    u 'vendor_id': u '1066459',
                    u 'vendor': u 'bkg'
                }
            }
        },

        u '1354690': {
            u 'hotel_data_node': {
                u '_id': 2001829735393701201 L,
                u 'ids': {
                    u 'bkg': [u '1354690'],
                    u 'voy': 5694961161423235761 L
                },
                u 'vendor_info': {
                    u 'vendor_id': u '1354690',
                    u 'vendor': u 'bkg'
                }
            }
        },

        u '1300150': {
            u 'hotel_data_node': {
                u '_id': 2937209460187035224 L,
                u 'ids': {
                    u 'bkg': [u '1300150'],
                    u 'voy': 2447701064370670892 L
                },
                u 'vendor_info': {
                    u 'vendor_id': u '1300150',
                    u 'vendor': u 'bkg'
                }
            }
        },

        u '472468': {
            u 'hotel_data_node': {
                u '_id': 48272593877071744 L,
                u 'ids': {
                    u 'bkg': [u '472468'],
                    u 'voy': 658992090378786622 L
                },
                u 'vendor_info': {
                    u 'vendor_id': u '472468',
                    u 'vendor': u 'bkg'
                }
            }
        },

        u '300420': {
            u 'hotel_data_node': {
                u '_id': 2802488975195270489 L,
                u 'ids': {
                    u 'bkg': [u '300420'],
                    u 'voy': 8506688262306690280 L
                },
                u 'vendor_info': {
                    u 'vendor_id': u '300420',
                    u 'vendor': u 'bkg'
                }
            }
        },

        u '722942': {
            u 'hotel_data_node': {
                u '_id': 74159934735391119 L,
                u 'ids': {
                    u 'bkg': [u '722942'],
                    u 'voy': 2437681586480714100 L
                },
                u 'vendor_info': {
                    u 'vendor_id': u '722942',
                    u 'vendor': u 'bkg'
                }
            }
        }
    }
}

【问题讨论】:

  • 当我尝试加载此 json 时,我得到 json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1) jsonlint.com 也将其检测为无效
  • @Racialz 这不是有效的 JSON,因为使用了“u”。 stackoverflow.com/questions/13940272/…

标签: python json dictionary


【解决方案1】:

根据您的 JSON 格式,您可以这样做:

your_json['data'].keys()

【讨论】:

    【解决方案2】:

    希望这会有所帮助。

    result = []
    json = {u'data': {u'244332': {u'hotel_data_node': {u'_id': 919824916605752258L, u'ids': {u'bkg': [u'244332'], u'voy': 9174725345440343760L}, u'vendor_info': {u'vendor_id': u'244332', u'vendor': u'bkg'}}},
    
    u'1066459': {u'hotel_data_node': {u'_id':2735067627304153118L, u'ids': {u'bkg': [u'1066459'], u'voy': 6032400126419907661L}, u'vendor_info': {u'vendor_id': u'1066459', u'vendor': u'bkg'}}},
    
    u'1354690': {u'hotel_data_node': {u'_id': 2001829735393701201L, u'ids': {u'bkg': [u'1354690'], u'voy': 5694961161423235761L}, u'vendor_info': {u'vendor_id': u'1354690', u'vendor': u'bkg'}}},
    
    u'1300150': {u'hotel_data_node': {u'_id': 2937209460187035224L, u'ids': {u'bkg': [u'1300150'], u'voy': 2447701064370670892L}, u'vendor_info': {u'vendor_id': u'1300150', u'vendor': u'bkg'}}},
    
    u'472468': {u'hotel_data_node': {u'_id': 48272593877071744L, u'ids':{u'bkg': [u'472468'], u'voy': 658992090378786622L}, u'vendor_info': {u'vendor_id': u'472468', u'vendor': u'bkg'}}},
    
    u'300420': {u'hotel_data_node': {u'_id': 2802488975195270489L, u'ids': {u'bkg': [u'300420'], u'voy': 8506688262306690280L},u'vendor_info': {u'vendor_id': u'300420', u'vendor': u'bkg'}}},
    
    u'722942': {u'hotel_data_node': {u'_id': 74159934735391119L, u'ids': {u'bkg': [u'722942'], u'voy': 2437681586480714100L}, u'vendor_info': {u'vendor_id': u'722942', u'vendor': u'bkg'}}} }}
    
    for key in json['data']: 
        result += json['data'][key]['hotel_data_node']['ids']['bkg']
    print(result)
    >>>[u'244332', u'1066459', u'1354690', u'1300150', u'472468', u'300420', u'722942']
    

    【讨论】:

    • 正如@user3579261所说,如果你所有的'bkg'值都与你的键相同,那么你只需要做json['data'].keys。
    【解决方案3】:

    我猜这是一个重复问题,请参考:

    Accessing JSON elements

    也是为了“你”的缘故:

    Python: json.loads returns items prefixing with 'u'

    【讨论】:

      猜你喜欢
      • 2019-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-30
      • 2018-10-21
      • 2017-09-15
      • 2016-04-30
      • 2016-02-19
      相关资源
      最近更新 更多