0

I am trying to Parse a Json array, A sample of the array i get is below with my code.

I can not seem to workout what my issue is, please forgive my question if I have included too much

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json

map = "[{'network' : 'networkA','ycoord' : '73','zcoord' : '-2612','xcoord' : '-4461','owner' : 'PlayerA','name' : 'PlaceA'}, {'network' : 'NetworkB','ycoord' : '66','zcoord' : '-1915','xcoord' : '1156','owner' : 'PlayerB','name' : 'PlaceB'}, {'network' : 'NetWorkB','ycoord' : '71','zcoord' : '3091','xcoord' : '4541','owner' : 'PlayerB','name' : 'PlaceC'}, {'network' : 'NetworkB','ycoord' : '118','zcoord' : '-66','xcoord' : '5','owner' : 'PlayerB','name' : 'PlaceD'}, {'network' : 'networkA','ycoord' : '71','zcoord' : '761','xcoord' : '-248','owner' : 'PlayerA','name' : 'PlaceE'}]"
data = json.load(map)
for item in data:
    print "Network : "+ str(item['network'])
    print "Name    : "+ str(item['name'])
    print "Owner   : "+ str(item['owner'])
    print "Co ords : ("+ str(item['ycoord']+", "+ str(item['xcoord']+", "+ str(item['Zcoord']+")"

I get The error

  File "test.py", line 8, in <module>
    data = json.load(map)
  File "/usr/lib/python2.7/json/__init__.py", line 274, in load
    return loads(fp.read(),
AttributeError: 'str' object has no attribute 'read'

Readable Json Data (because I know what's in the code isn't)

[{
  'network' : 'networkA',
  'ycoord' : '73',
  'zcoord' : '-2612',
  'xcoord' : '-4461',
  'owner' : 'PlayerA',
  'name' : 'PlaceA'
}, {
  'network' : 'NetworkB',
  'ycoord' : '66',
  'zcoord' : '-1915',
  'xcoord' : '1156',
  'owner' : 'PlayerB',
  'name' : 'PlaceB'
}, {
  'network' : 'NetWorkB',
  'ycoord' : '71',
  'zcoord' : '3091',
  'xcoord' : '4541',
  'owner' : 'PlayerB',
  'name' : 'PlaceC'
}, {
  'network' : 'NetworkB',
  'ycoord' : '118',
  'zcoord' : '-66',
  'xcoord' : '5',
  'owner' : 'PlayerB',
  'name' : 'PlaceD'
}, {
  'network' : 'networkA',
  'ycoord' : '71',
  'zcoord' : '761',
  'xcoord' : '-248',
  'owner' : 'PlayerA',
  'name' : 'PlaceE'
}]

2 Answers 2

3

You want loads() instead of load(). Read the documentation, load() takes a filename, loads() takes actual JSON data.

Sign up to request clarification or add additional context in comments.

1 Comment

So how do I put it through a for loop to extract the different values?
0

json.load() function will require filename as a parameter. In your case, You don't want filename but an actual JSON array. Use json.loads() instead of json.load()

Also, remember The functions with an s take string parameters. The others take file streams. This applies to json.dump() and json.dumps() too.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.