Converting dictionary to JSON
json.dumps()
converts a dictionary to str
object, not a json(dict)
object! So you have to load your str
into a dict
to use it by using json.loads()
method
See json.dumps()
as a save method and json.loads()
as a retrieve method.
This is the code sample which might help you understand it more:
import jsonr = {'is_claimed': 'True', 'rating': 3.5}r = json.dumps(r)loaded_r = json.loads(r)loaded_r['rating'] #Output 3.5type(r) #Output strtype(loaded_r) #Output dict
json.dumps()
returns the JSON string representation of the python dict. See the docs
You can't do r['rating']
because r is a string, not a dict anymore
Perhaps you meant something like
r = {'is_claimed': 'True', 'rating': 3.5}json = json.dumps(r) # note i gave it a different namefile.write(str(r['rating']))
json.dumps()
is used to decode JSON data
json.loads
take a string as input and returns a dictionary as output.json.dumps
take a dictionary as input and returns a string as output.
import json# initialize different datastr_data = 'normal string'int_data = 1float_data = 1.50list_data = [str_data, int_data, float_data]nested_list = [int_data, float_data, list_data]dictionary = { 'int': int_data, 'str': str_data, 'float': float_data, 'list': list_data, 'nested list': nested_list}# convert them to JSON data and then print itprint('String :', json.dumps(str_data))print('Integer :', json.dumps(int_data))print('Float :', json.dumps(float_data))print('List :', json.dumps(list_data))print('Nested List :', json.dumps(nested_list, indent=4))print('Dictionary :', json.dumps(dictionary, indent=4)) # the json data will be indented
output:
String : "normal string"Integer : 1Float : 1.5List : ["normal string", 1, 1.5]Nested List : [ 1, 1.5, [ "normal string", 1, 1.5 ]]Dictionary : { "int": 1, "str": "normal string", "float": 1.5, "list": [ "normal string", 1, 1.5 ], "nested list": [ 1, 1.5, [ "normal string", 1, 1.5 ] ]}
- Python Object to JSON Data Conversion
| Python | JSON ||:--------------------------------------:|:------:|| dict | object || list, tuple | array || str | string || int, float, int- & float-derived Enums | number || True | true || False | false || None | null |
UPDATE
In the JSON file
nested_dictionary = { 'one': nested_list, 'two': dictionary,}json_dict = {'Nested Dictionary': nested_dictionary, 'Multiple':[nested_dictionary, nested_dictionary, nested_dictionary] }with open("test_nested.json", "w") as outfile: json.dump(json_dict, outfile, indent=4, sort_keys=False)
chart response
output into test_nested.json
{ "Nested Dictionary": { "one": [ 1, 1.5, [ "normal string", 1, 1.5 ] ], "two": { "int": 1, "str": "normal string", "float": 1.5, "list": [ "normal string", 1, 1.5 ], "nested list": [ 1, 1.5, [ "normal string", 1, 1.5 ] ] } }, "Multiple": [ { "one": [ 1, 1.5, [ "normal string", 1, 1.5 ] ], "two": { "int": 1, "str": "normal string", "float": 1.5, "list": [ "normal string", 1, 1.5 ], "nested list": [ 1, 1.5, [ "normal string", 1, 1.5 ] ] } }, { "one": [ 1, 1.5, [ "normal string", 1, 1.5 ] ], "two": { "int": 1, "str": "normal string", "float": 1.5, "list": [ "normal string", 1, 1.5 ], "nested list": [ 1, 1.5, [ "normal string", 1, 1.5 ] ] } }, { "one": [ 1, 1.5, [ "normal string", 1, 1.5 ] ], "two": { "int": 1, "str": "normal string", "float": 1.5, "list": [ "normal string", 1, 1.5 ], "nested list": [ 1, 1.5, [ "normal string", 1, 1.5 ] ] } } ]}
class
instance to JSON
- A simple solution:
class Foo(object): def __init__( self, data_str, data_int, data_float, data_list, data_n_list, data_dict, data_n_dict): self.str_data = data_str self.int_data = data_int self.float_data = data_float self.list_data = data_list self.nested_list = data_n_list self.dictionary = data_dict self.nested_dictionary = data_n_dictfoo = Foo( str_data, int_data, float_data, list_data, nested_list, dictionary, nested_dictionary)# Because the JSON object is a Python dictionary. result = json.dumps(foo.__dict__, indent=4)# See table above.# or with built-in function that accesses .__dict__ for you, called vars()# result = json.dumps(vars(foo), indent=4)print(result) # same as before
- Even simpler
class Bar: def toJSON(self): return json.dumps(self, default=lambda o: o.__dict__, sort_keys=False, indent=4)bar = Bar()bar.web = "Stackoverflow"bar.type = "Knowledge"bar.is_the_best = Truebar.user = Bar()bar.user.name = "Milovan"bar.user.age = 34print(bar.toJSON())
chart response
output:
{ "web": "Stackoverflow", "type": "Knowledge", "is_the_best": true, "user": { "name": "Milovan", "age": 34 }}