簡體   English   中英

如何使用python在JSON對象中添加方括號

[英]How to add square brackets in JSON object with python

我只需要上下文是一個數組,即'contexts':[{}]而不是'contexts':{}

以下是我的python代碼,可幫助將python數據幀轉換為所需的JSON格式

這是一行的樣本df

name      type  aim      context     
xxx xxx     specs 67646546  United States of America  

data = {'entities':[]}
for key,grp in df.groupby('name'):
    for idx, row in grp.iterrows():
        temp_dict_alpha = {'name':key,'type':row['type'],'data' :{'contexts':{'attributes':{},'context':{'dcountry':row['dcountry']}}}}

        attr_row = row[~row.index.isin(['name','type'])]
        for idx2,row2 in attr_row.iteritems():
            dict_temp = {}
            dict_temp[idx2] = {'values':[]}
            dict_temp[idx2]['values'].append({'value':row2,'source':'internal','locale':'en_Us'})

            temp_dict_alpha['data']['contexts']['attributes'].update(dict_temp)


        data['entities'].append(temp_dict_alpha)


print(json.dumps(data, indent = 4))

所需的輸出:

{
    "entities": [{
            "name": "XXX XXX",
            "type": "specs",
            "data": {
                "contexts": [{
                        "attributes": {
                            "aim": {
                                "values": [{
                                        "value": 67646546,
                                        "source": "internal",
                                        "locale": "en_Us"
                                    }
                                ]
                            }
                        },
                        "context": {
                            "country": "United States of America"
                        }
                    }
                ]
            }
        }
    ]
}

但是我低於輸出

{
    "entities": [{
            "name": "XXX XXX",
            "type": "specs",
            "data": {
                "contexts": {
                    "attributes": {
                        "aim": {
                            "values": [{
                                    "value": 67646546,
                                    "source": "internal",
                                    "locale": "en_Us"
                                }
                            ]
                        }
                    },
                    "context": {
                        "country": "United States of America"
                    }
                }
            }
        }
    ]
}

誰能建議使用Python解決此問題的方法。

問題在下面的代碼中

 temp_dict_alpha = {'name':key,'type':row['type'],'data' :{'contexts':{'attributes':{},'context':{'dcountry':row['dcountry']}}}}

如您所見,您已經在創建contexts dict並為其分配值。 你能做的就是這樣

    contextObj = {'attributes':{},'context':{'dcountry':row['dcountry']}}
    contextList = []
    for idx, row in grp.iterrows():
        temp_dict_alpha = {'name':key,'type':row['type'],'data' :{'contexts':{'attributes':{},'context':{'dcountry':row['dcountry']}}}}

        attr_row = row[~row.index.isin(['name','type'])]
        for idx2,row2 in attr_row.iteritems():
            dict_temp = {}
            dict_temp[idx2] = {'values':[]}
            dict_temp[idx2]['values'].append({'value':row2,'source':'internal','locale':'en_Us'})
            contextObj['attributes'].update(dict_temp)
            contextList.append(contextObj)

請注意-該代碼將出現邏輯錯誤,並且可能無法運行(因為我很難理解其背后的邏輯)。 但是這是您需要做的。

您需要創建一個對象列表,這不是您要執行的操作。 您正在嘗試操作一個對象,當其JSON轉儲時,您將獲得一個對象而不是一個列表。 您需要的是列表。 您需要為每個迭代創建上下文對象,並繼續將它們附加到我們之前創建的本地列表contextList中。

一旦for循環終止,您可以使用contextList更新原始對象,您將擁有一個對象列表,而不是現在擁有的object

我認為這樣做:

import pandas as pd
import json


df = pd.DataFrame([['xxx xxx','specs','67646546','United States of America']],
                       columns = ['name', 'type', 'aim', 'context' ])

data = {'entities':[]}
for key,grp in df.groupby('name'):
    for idx, row in grp.iterrows():
        temp_dict_alpha = {'name':key,'type':row['type'],'data' :{'contexts':[{'attributes':{},'context':{'country':row['context']}}]}}

        attr_row = row[~row.index.isin(['name','type'])]
        for idx2,row2 in attr_row.iteritems():
            if idx2 != 'aim':
                continue
            dict_temp = {}
            dict_temp[idx2] = {'values':[]}
            dict_temp[idx2]['values'].append({'value':row2,'source':'internal','locale':'en_Us'})

            temp_dict_alpha['data']['contexts'][0]['attributes'].update(dict_temp)


        data['entities'].append(temp_dict_alpha)


print(json.dumps(data, indent = 4))

輸出:

{
    "entities": [
        {
            "name": "xxx xxx",
            "type": "specs",
            "data": {
                "contexts": [
                    {
                        "attributes": {
                            "aim": {
                                "values": [
                                    {
                                        "value": "67646546",
                                        "source": "internal",
                                        "locale": "en_Us"
                                    }
                                ]
                            }
                        },
                        "context": {
                            "country": "United States of America"
                        }
                    }
                ]
            }
        }
    ]
}

暫無
暫無

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

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