Parsing JSON Object Issues in Python

I am trying to parse some text files containing JSON objects in Python using the json.load () method. It works for one set of them, but it won't:

{
"mapinfolist":{
  "mapinfo":[
  {"sku":"00028-0059","price":"38.35","percent":"50","basepercent":"50","exact":0,"match":0,"roundup":0}
  ,{"sku":"77826-7230","price":"4.18","percent":"60","basepercent":"60","exact":1,"match":0,"roundup":0}
  ,{"sku":"77827-1310","price":"2.36","percent":"60","basepercent":"60","exact":1,"match":0,"roundup":0}
  ,{"sku":"77827-2020","price":"2.36","percent":"60","basepercent":"60","exact":1,"match":0,"roundup":0}
  ,{"sku":"77827-3360","price":"2.36","percent":"60","basepercent":"60","exact":1,"match":0,"roundup":0}
  ,{"sku":"77827-4060","price":"2.36","percent":"60","basepercent":"60","exact":1,"match":0,"roundup":0}
  ,{"sku":"77827-4510","price":"2.36","percent":"60","basepercent":"60","exact":1,"match":0,"roundup":0}
  ,{"sku":"77827-7230","price":"2.36","percent":"60","basepercent":"60","exact":1,"match":0,"roundup":0}
  ],
  "count":2
}
}

      

It's in a file named 'map.txt' - I open it using open ('map.txt') and then call json.load (). When I run my test program (test.py) the following error trace is generated:

Traceback (most recent call last):
  File "test.py", line 28, in <module>
    main()
  File "test.py", line 23, in main
    map_list = json.load(f1) 
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/json/__init__.py", line 268, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/json/__init__.py", line 318, in loads
return _default_decoder.decode(s)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/json/decoder.py", line 343, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/json/decoder.py", line 361, in raw_decode
raise ValueError(errmsg("Expecting value", s, err.value)) from None
ValueError: Expecting value: line 1 column 1 (char 0)

      

The JSON object is valid - when I put it in https://www.jsoneditoronline.org/ it parses and displays correctly, so I can't figure out what might stop it working when I try to do it in Python. Any advice would be much appreciated. Thank!

EDIT: Here's my code.

import json
def main():

with open('map.txt') as f1:
    map_list = json.load(f1)

      

Trying it map_list = json.loads(f1.read())

also fails and gives me an almost identical error trace.

EDIT - RESOLVED:

I just copied and pasted FROM map.txt into a new TextEdit map2.txt file and used the new file instead and it works now. I copied directly from the old file and did not make any changes - the only difference is that it is a different file. I can't make heads or tails, why would that be - any ideas? I would like to understand what could have happened so that I can avoid the problem in the future.

+3


source to share


2 answers


Does the following solution work for you?

import json
f = open("map.txt")
map = json.loads(f.read())

      



Python docs

0


source


maybe try to read the whole file in line and then use json.loads



         def yourfunc():
             file = open('map.txt')
             json_string = file.read()
             map = json.loads(json_string)

      

-2


source







All Articles