18

I am having an issue with JSON, I can't seem to figure out why this is not working. This is supposed to output JSON.

Here is my code

#!/usr/bin/env python
import socket
import struct
import json
def unpack_varint(s):
 d = 0
 i = 0
 while True:
 b = ord(s.recv(1))
 d |= (b & 0x7F) << 7*i
 i += 1
 if not b & 0x80:
 return d
def pack_data(d):
 return struct.pack('>b', len(d)) + d
def pack_port(i):
 return struct.pack('>H', i)
def get_info(host, port=25565):
 # Connect
 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 s.connect((host, port))
 # Send handshake + status request
 s.send(pack_data("\x00\x00" + pack_data(host.encode('utf8')) + pack_port(port) + "\x01"))
 s.send(pack_data("\x00"))
 # Read response
 unpack_varint(s) # Packet length
 unpack_varint(s) # Packet ID
 l = unpack_varint(s) # String length
 d = ""
 while len(d) < l:
 d += s.recv(1024)
 # Close our socket
 s.close()
 # Load json and return
 return json.loads(d.decode('utf8'))
get_info('162.213.43.124');

I am getting this error

Traceback (most recent call last):
 File "main.py", line 46, in 
 get_info('162.213.43.124');
 File "main.py", line 45, in get_info
 return json.loads(d.decode('utf8'))
 File "/usr/local/lib/python2.7/json/__init__.py", line 338, in loads
 return _default_decoder.decode(s)
 File "/usr/local/lib/python2.7/json/decoder.py", line 365, in decode
 obj, end = self.raw_decode(s, idx=_w(s, 0).end())
 File "/usr/local/lib/python2.7/json/decoder.py", line 383, in raw_decode
 raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded

If anyone could come to the rescue that would be awesome!

asked Nov 21, 2013 at 18:13
1
  • 1
    > your json is invalid Commented Nov 21, 2013 at 18:17

1 Answer 1

21

It seems that you have invalid JSON. In that case, that's totally dependent on the data the server sends you which you have not shown. I would suggest running the response through a JSON validator.

answered Nov 21, 2013 at 18:17
Sign up to request clarification or add additional context in comments.

2 Comments

I'm new to python, how would I get the output that the server is sending so I could put it into JSON Validator?
@Mario - print d.decode('utf-8') or if using python 3.x print(d.decode('utf-8'))

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

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.