Bob Jordan
Bob Jordan

Reputation: 3217

Python: Convert a list of python dictionaries to an array of JSON objects

I'm trying to write a function to convert a python list into a JSON array of {"mpn":"list_value"} objects, where "mpn" is the literal string value I need for every object but "list_value" is the value from the python list. I'll use the output of this function for an API get request.

part_nums = ['ECA-1EHG102','CL05B103KB5NNNC','CC0402KRX5R8BB104']

def json_list(list):
    lst = []
    d = {}
    for pn in list:
        d['mpn']=pn
        lst.append(d)
    return json.dumps(lst, separators=(',',':'))

print json_list(part_nums)

This current function is not working and returns last value in the python list for all JSON objects:

>[{"mpn":"CC0402KRX5R8BB104"},{"mpn":"CC0402KRX5R8BB104"},{"mpn":"CC0402KRX5R8BB104"}]

However, of course I need my function to return the unique list values in the objects as such:

>[{"mpn":"ECA-1EHG102"},{"mpn":"CL05B103KB5NNNC"},{"mpn":"CC0402KRX5R8BB104"}]

Bottom line is I don't understand why this function isn't working. I expected I could append a dictionary with a single {key:value} pair to a python list and it wouldn't matter that all of the dictionaries have the same key because they would be independent. Thanks for your help.

Upvotes: 13

Views: 68658

Answers (3)

Mazharul Haque
Mazharul Haque

Reputation: 11

import json
part_nums = ['ECA-1EHG102','CL05B103KB5NNNC','CC0402KRX5R8BB104']

def json_list(list):
    lst = []
    for pn in list:
        d = {}
        d['mpn']=pn
        lst.append(d)
    return json.dumps(lst)

print json_list(part_nums)   # for pyhon2
print (json_list(part_nums)) # for python3

Upvotes: 0

Xavier Combelle
Xavier Combelle

Reputation: 11235

As explained by others (in answers) you should create a new dictionary for each item on the list elsewhere you reference always the same dictionary

import json
part_nums = ['ECA-1EHG102','CL05B103KB5NNNC','CC0402KRX5R8BB104']

def json_list(list):
    lst = []
    for pn in list:
        d = {}
        d['mpn']=pn
        lst.append(d)
    return json.dumps(lst)

print json_list(part_nums)

print

[{"mpn": "ECA-1EHG102"}, {"mpn": "CL05B103KB5NNNC"}, {"mpn": "CC0402KRX5R8BB104"}]

Upvotes: 11

jfs
jfs

Reputation: 414825

You are adding the exact same dictionary to the list. You should create a new dictionary for each item in the list:

json.dumps([dict(mpn=pn) for pn in lst])

Upvotes: 31

Related Questions