字典值是dict但在json转储中打印为字符串

时间:2018-03-13 21:20:39

标签: json python-3.x

除了这个小问题,我的脚本工作正常。我的脚本循环遍历列表项并在循环上附加json字符串,然后将json转储到文件。

我的json字符串:

main_json = {"customer": {"main_address": "","billing_address": "","invoice_reference": "","product": []}}

主循环:

   for row in result:
        account_id = ACCOUNTID_DATA_CACHE.get(row['customer.main_address.customer_id'])
        if account_id is None or account_id != row['customer.main_address.customer_id']:
            if main_json:
                results.append(main_json)
            main_json = {"customer": {"main_address": "","billing_address": "","invoice_reference": "","product": []}}
            main_address = {}
            billing_address = {}          
            for key,value in row.items():
                if key.startswith('customer.main_address'):
                    main_address[key.split(".")[2]] = value
                if key.startswith('customer.billing_address'):
                    billing_address[key.split(".")[2]] = value

            billing_address_copy = billing_address.copy()

            for mkey,mvalue in main_address.items():
                for bkey,bvalue in billing_address_copy.items():
                    if str(bvalue) == str(mvalue):
                        bvalue = ''
                        billing_address_copy[bkey] = bvalue


            if all(value == '' for value in billing_address_copy.values()) is True:
                main_json['customer']['billing_address'] = ''
            else:
                main_json['customer']['billing_address'] = billing_address
            main_json['customer']['main_address'] = main_address
            product = parse_products(row)
            main_json['customer']['product'].append(product)

...

def parse_products(row):
product = {}
x = {}
for key,value in row.items():
    if key.startswith('customer.product'):
        product[key.split(".")[2]] = value
    if key.startswith('customer.product.custom_attributes'):

        x['domain'] = value
        print(x)
        product[key.split(".")[2]] = x


    if key == 'start_date' or 'renewal_date':
        value = str(value)
        product[key] = value
return product

在下面的这一部分中,如何确保转储时该值不是字符串?

if key.startswith('customer.product.custom_attributes'):

    x['domain'] = value
    print(x)
    product[key.split(".")[2]] = x

因为在输出中我得到了:

            {
                "custom_attributes": "{'domain': 'somedomain.com'}",
                "description": "some_description",
                "discount": "0.00"}

当我真正想要的是:

            {
                "custom_attributes": {"domain": "somedomain.com"},
                "description": "some_description",
                "discount": "0.00"}

编辑:我是如何倾销的:

with open('out.json', 'w') as jsonout:
    json.dump(main_json, jsonout, sort_keys=True, indent=4)

1 个答案:

答案 0 :(得分:1)

嗯,这个IF有缺陷并且总是正确的:

如果key =='start_date'或'renewal_date':

所以你要把所有东西都转换为str()