Home > other >  Python parsing json from string
Python parsing json from string

Time:09-17

I need to parse json from a partial string I get back from a web service. I have the following snippet of code which is working fine but is extremely ugly. Is there a better or cleaner way to do this?

x = '"1":{"name":"item one","code":"1"},"2":{"name":"item two","code":"2"},"3":{"name":"item three","code":"3"}'
split = x.split('},')
index = 0
for s in split:
    split[index] = '{'   s   '}}'
    index  = 1
joined = ','.join(split)
joined = '['   joined[:-1]   ']'
j = json.loads(joined)
print(j)

Here is the result:

[{'1': {'name': 'item one', 'code': '1'}},
 {'2': {'name': 'item two', 'code': '2'}},
 {'3': {'name': 'item three', 'code': '3'}}]

CodePudding user response:

You can use the following snippet:

>>> [dict([t]) for t in json.loads(f"{{{x}}}").items()]
[{'1': {'name': 'item one', 'code': '1'}},
 {'2': {'name': 'item two', 'code': '2'}},
 {'3': {'name': 'item three', 'code': '3'}}]

CodePudding user response:

You can fix the inconsistency by hand (add the missing braces) and use json module to parse:

data = json.loads('{'   x   '}')

Then you can convert the parsed data to the desired representation:

[{item[0]: item[1]} for item in data.items()]

#[{'1': {'name': 'item one', 'code': '1'}}, 
# {'2': {'name': 'item two', 'code': '2'}}, 
# {'3': {'name': 'item three', 'code': '3'}}]

Otherwise, you will end up implementing your own JSON parser, which is not trivial.

  • Related