我很难从我的JSON中找到一种正确的方法来打印我的结果。
我找了好几个小时,但没有找到答案。
以下是我所拥有的JSNO:
json = \
{
"Envelope": {
"Body": {
"GetCTProductsResponse": {
"GetCTProductsResult": {
"CTPRODUCT": [
{
"CODE": "TESLAAIR3",
"PRODUCTGROUPCODE": "AIRPURIF",
"NAME": "Tesla Air purifier AIR 3",
"MANUFACTURER": "Tesla",
"MANUFACTURERCODE": "TESLA",
"QTTYINSTOCK": ">20",
"TAX": 21,
"PRICE": "69,9000",
"RETAILPRICE": 0,
"SHORT_DESCRIPTION": "",
"WARRANTY": "24M",
"EUR_ExchangeRate": "0,00",
"BARCODE": "",
"IMAGE_URL": ""
},
{
"CODE": "SKV4140GL",
"PRODUCTGROUPCODE": "AIRPURIF",
"NAME": "Xiaomi MI SMART Antibacterial humidifier",
"MANUFACTURER": "Xiaomi",
"MANUFACTURERCODE": "XIAOMI",
"QTTYINSTOCK": ">20",
"TAX": 21,
"PRICE": "39,0000",
"RETAILPRICE": 0,
"SHORT_DESCRIPTION": "",
"WARRANTY": "2G",
"EUR_ExchangeRate": "0,00",
"BARCODE": "",
"IMAGE_URL": "http://www.ct4partners.ba/UploadDownload/ProductImages/SKV4140GL_201117093216482.jpg"
},
{
"CODE": "SKV4140GL",
"PRODUCTGROUPCODE": "AIRPURIF",
"NAME": "Xiaomi MI SMART Antibacterial humidifier",
"MANUFACTURER": "Xiaomi",
"MANUFACTURERCODE": "XIAOMI",
"QTTYINSTOCK": ">20",
"TAX": 21,
"PRICE": "39,0000",
"RETAILPRICE": 0,
"SHORT_DESCRIPTION": "",
"WARRANTY": "2G",
"EUR_ExchangeRate": "0,00",
"BARCODE": "",
"IMAGE_URL": "http://www.ct4partners.ba/UploadDownload/ProductImages/SKV4140GL_201117093216098.jpg"
},
{
"CODE": "SKV4140GL",
"PRODUCTGROUPCODE": "AIRPURIF",
"NAME": "Xiaomi MI SMART Antibacterial humidifier",
"MANUFACTURER": "Xiaomi",
"MANUFACTURERCODE": "XIAOMI",
"QTTYINSTOCK": ">20",
"TAX": 21,
"PRICE": "39,0000",
"RETAILPRICE": 0,
"SHORT_DESCRIPTION": "",
"WARRANTY": "2G",
"EUR_ExchangeRate": "0,00",
"BARCODE": "",
"IMAGE_URL": "http://www.ct4partners.ba/UploadDownload/ProductImages/SKV4140GL_201117093215238.jpg"
},
{
"CODE": "BHR4802GL",
"PRODUCTGROUPCODE": "ZVUCNICI",
"NAME": "Xiaomi Mi Portable Bluetooth Speaker Grey",
"MANUFACTURER": "Xiaomi",
"MANUFACTURERCODE": "XIAOMI",
"QTTYINSTOCK": ">20",
"TAX": 21,
"PRICE": "17,0000",
"RETAILPRICE": 0,
"SHORT_DESCRIPTION": "",
"WARRANTY": "2G",
"EUR_ExchangeRate": "0,00",
"BARCODE": "",
"IMAGE_URL": "http://www.ct4partners.ba/UploadDownload/ProductImages/BHR4802GL_1.jpg"
}
]
}
}
}
}
}使用Python,我想访问代码变量("CODE": "TESLAAIR3")
我尝试了很多东西,转储,负载,负载等等,但没有解决我的问题。
谢谢。
发布于 2021-12-21 14:08:33
你可以试试:
a["Envelope"]["Body"]["GetCTProductsResponse"]["GetCTProductsResult"]["CTPRODUCT"][0]["CODE"]发布于 2021-12-21 14:10:02
这将打印出所有代码:
for code in test["Envelope"]["Body"]["GetCTProductsResponse"]["GetCTProductsResult"]["CTPRODUCT"]:
print(code["CODE"])发布于 2021-12-21 14:22:18
另一种这样做的方法是:
data = {
"Envelope": {
"Body": {
"GetCTProductsResponse": {
"GetCTProductsResult": {
"CTPRODUCT": [
{
"CODE": "TESLAAIR3",
"PRODUCTGROUPCODE": "AIRPURIF",
"NAME": "Tesla Air purifier AIR 3",
"MANUFACTURER": "Tesla",
"MANUFACTURERCODE": "TESLA",
"QTTYINSTOCK": ">20",
"TAX": 21,
"PRICE": "69,9000",
"RETAILPRICE": 0,
"SHORT_DESCRIPTION": "",
"WARRANTY": "24M",
"EUR_ExchangeRate": "0,00",
"BARCODE": "",
"IMAGE_URL": ""
},
{
"CODE": "SKV4140GL",
"PRODUCTGROUPCODE": "AIRPURIF",
"NAME": "Xiaomi MI SMART Antibacterial humidifier",
"MANUFACTURER": "Xiaomi",
"MANUFACTURERCODE": "XIAOMI",
"QTTYINSTOCK": ">20",
"TAX": 21,
"PRICE": "39,0000",
"RETAILPRICE": 0,
"SHORT_DESCRIPTION": "",
"WARRANTY": "2G",
"EUR_ExchangeRate": "0,00",
"BARCODE": "",
"IMAGE_URL": "http://www.ct4partners.ba/UploadDownload/ProductImages/SKV4140GL_201117093216482.jpg"
},
{
"CODE": "SKV4140GL",
"PRODUCTGROUPCODE": "AIRPURIF",
"NAME": "Xiaomi MI SMART Antibacterial humidifier",
"MANUFACTURER": "Xiaomi",
"MANUFACTURERCODE": "XIAOMI",
"QTTYINSTOCK": ">20",
"TAX": 21,
"PRICE": "39,0000",
"RETAILPRICE": 0,
"SHORT_DESCRIPTION": "",
"WARRANTY": "2G",
"EUR_ExchangeRate": "0,00",
"BARCODE": "",
"IMAGE_URL": "http://www.ct4partners.ba/UploadDownload/ProductImages/SKV4140GL_201117093216098.jpg"
},
{
"CODE": "SKV4140GL",
"PRODUCTGROUPCODE": "AIRPURIF",
"NAME": "Xiaomi MI SMART Antibacterial humidifier",
"MANUFACTURER": "Xiaomi",
"MANUFACTURERCODE": "XIAOMI",
"QTTYINSTOCK": ">20",
"TAX": 21,
"PRICE": "39,0000",
"RETAILPRICE": 0,
"SHORT_DESCRIPTION": "",
"WARRANTY": "2G",
"EUR_ExchangeRate": "0,00",
"BARCODE": "",
"IMAGE_URL": "http://www.ct4partners.ba/UploadDownload/ProductImages/SKV4140GL_201117093215238.jpg"
},
{
"CODE": "BHR4802GL",
"PRODUCTGROUPCODE": "ZVUCNICI",
"NAME": "Xiaomi Mi Portable Bluetooth Speaker Grey",
"MANUFACTURER": "Xiaomi",
"MANUFACTURERCODE": "XIAOMI",
"QTTYINSTOCK": ">20",
"TAX": 21,
"PRICE": "17,0000",
"RETAILPRICE": 0,
"SHORT_DESCRIPTION": "",
"WARRANTY": "2G",
"EUR_ExchangeRate": "0,00",
"BARCODE": "",
"IMAGE_URL": "http://www.ct4partners.ba/UploadDownload/ProductImages/BHR4802GL_1.jpg"
}
]
}
}
}
}
}和
import pandas as pd
import json
json_object = json.dumps(data)
results = pd.json_normalize(data)现在,定义以下函数:
def flatten_nested_json_df(df):
df = df.reset_index()
s = (df.applymap(type) == list).all()
list_columns = s[s].index.tolist()
s = (df.applymap(type) == dict).all()
dict_columns = s[s].index.tolist()
while len(list_columns) > 0 or len(dict_columns) > 0:
new_columns = []
for col in dict_columns:
horiz_exploded = pd.json_normalize(df[col]).add_prefix(f'{col}.')
horiz_exploded.index = df.index
df = pd.concat([df, horiz_exploded], axis=1).drop(columns=[col])
new_columns.extend(horiz_exploded.columns) # inplace
for col in list_columns:
#print(f"exploding: {col}")
df = df.drop(columns=[col]).join(df[col].explode().to_frame())
new_columns.append(col)
s = (df[new_columns].applymap(type) == list).all()
list_columns = s[s].index.tolist()
s = (df[new_columns].applymap(type) == dict).all()
dict_columns = s[s].index.tolist()
return df然后这样做:
results = pd.json_normalize(data)
flatten_nested_json_df(results)它返回一个df,您可以从中选择您想要的任何内容:
index \
0 0
0 0
0 0
0 0
0 0
Envelope.Body.GetCTProductsResponse.GetCTProductsResult.CTPRODUCT.CODE \
0 TESLAAIR3
0 SKV4140GL
0 SKV4140GL
0 SKV4140GL
0 BHR4802GL
Envelope.Body.GetCTProductsResponse.GetCTProductsResult.CTPRODUCT.PRODUCTGROUPCODE \
0 AIRPURIF
0 AIRPURIF
0 AIRPURIF
0 AIRPURIF
0 ZVUCNICI
Envelope.Body.GetCTProductsResponse.GetCTProductsResult.CTPRODUCT.NAME \
0 Tesla Air purifier AIR 3
0 Xiaomi MI SMART Antibacterial humidifier
0 Xiaomi MI SMART Antibacterial humidifier
0 Xiaomi MI SMART Antibacterial humidifier
0 Xiaomi Mi Portable Bluetooth Speaker Grey
Envelope.Body.GetCTProductsResponse.GetCTProductsResult.CTPRODUCT.MANUFACTURER \
0 Tesla
0 Xiaomi
0 Xiaomi
0 Xiaomi
0 Xiaomi
Envelope.Body.GetCTProductsResponse.GetCTProductsResult.CTPRODUCT.MANUFACTURERCODE \
0 TESLA
0 XIAOMI
0 XIAOMI
0 XIAOMI
0 XIAOMI
Envelope.Body.GetCTProductsResponse.GetCTProductsResult.CTPRODUCT.QTTYINSTOCK \
0 >20
0 >20
0 >20
0 >20
0 >20
Envelope.Body.GetCTProductsResponse.GetCTProductsResult.CTPRODUCT.TAX \
0 21
0 21
0 21
0 21
0 21
Envelope.Body.GetCTProductsResponse.GetCTProductsResult.CTPRODUCT.PRICE \
0 69,9000
0 39,0000
0 39,0000
0 39,0000
0 17,0000
Envelope.Body.GetCTProductsResponse.GetCTProductsResult.CTPRODUCT.RETAILPRICE \
0 0
0 0
0 0
0 0
0 0
Envelope.Body.GetCTProductsResponse.GetCTProductsResult.CTPRODUCT.SHORT_DESCRIPTION \
0
0
0
0
0
Envelope.Body.GetCTProductsResponse.GetCTProductsResult.CTPRODUCT.WARRANTY \
0 24M
0 2G
0 2G
0 2G
0 2G
Envelope.Body.GetCTProductsResponse.GetCTProductsResult.CTPRODUCT.EUR_ExchangeRate \
0 0,00
0 0,00
0 0,00
0 0,00
0 0,00
Envelope.Body.GetCTProductsResponse.GetCTProductsResult.CTPRODUCT.BARCODE \
0
0
0
0
0
Envelope.Body.GetCTProductsResponse.GetCTProductsResult.CTPRODUCT.IMAGE_URL
0
0 http://www.ct4partners.ba/UploadDownload/Produ...
0 http://www.ct4partners.ba/UploadDownload/Produ...
0 http://www.ct4partners.ba/UploadDownload/Produ...
0 http://www.ct4partners.ba/UploadDownload/Produ... 它还具有向您显示列名中所需内容的路径的优点,以便:
data['Envelope']['Body']['GetCTProductsResponse']['GetCTProductsResult']['CTPRODUCT'][0]['CODE'] https://stackoverflow.com/questions/70436740
复制相似问题