simplejson.scanner.JSONDecodeError:期望值:第1行第1列(char 0)

时间:2015-01-15 12:13:05

标签: json python-3.x

我一直在为hackerrank编写一个简单的插件来编译和运行代码,从我的系统中解决hackerrank的问题。

例如:我需要测试此问题的代码https://www.hackerrank.com/challenges/solve-me-first

所以,我按照以下方式运行我的脚本:

python hackerrank.py https://www.hackerrank.com/challenges/solve-me-first solve-me-first.cpp 

我得到以下输出:

Traceback (most recent call last):
  File "hackerrank.py", line 126, in <module>
    h.run()
  File "hackerrank.py", line 113, in run
    if self.compile_and_test() == "NOT_FOUND":
  File "hackerrank.py", line 51, in compile_and_test
    j = self.r.json()
  File "/usr/lib/python2.7/dist-packages/requests/models.py", line 741, in json
    return json.loads(self.text, **kwargs)
  File "/usr/lib/python2.7/dist-packages/simplejson/__init__.py", line 488, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python2.7/dist-packages/simplejson/decoder.py", line 370, in decode
    obj, end = self.raw_decode(s)
  File "/usr/lib/python2.7/dist-packages/simplejson/decoder.py", line 389, in raw_decode
    return self.scan_once(s, idx=_w(s, idx).end())
  simplejson.scanner.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

这是我的hackerrank.py文件:

import requests
import time
import sys
import os.path

class HackerRank:
    def __init__(self,url,code="",ext=".py"):
        self.code = code
        self.ext = ext
        self.set_language()
        self.problem_url = url
        self.s = requests.session()
        self.set_post_url()

    def set_post_url(self):
        #rootUrl = "https://www.hackerrank.com/"
        #l = self.problem_url.split("/")
        #print l
        #if l[3] == "challenges":
        #    contestUrl = "/contests/master/challenges/" + l[4]
        #else:
        #    # it's a contest
        #    contestUrl = "/".join(l[3:])
        #self.post_url = rootUrl + "/rest/" + contestUrl + "/compile_tests/"
        self.post_url = self.problem_url

    def set_language(self):
        if self.ext == ".py":
            self.language = "python"
        if self.ext == ".c":
            self.language = "c"
        if self.ext == ".cpp":
            self.language = "cpp"
        if self.ext == ".java":
            self.language = "java"
        # TODO : find out the language value for other exts

    def set_code(self,code):
        self.code = code

    def generate_payload(self):
        self.payload = {'code' : self.code, 'language' : self.language}

    def compile_and_test(self):
        self.generate_payload()
        self.r = self.s.post(self.post_url, params=self.payload)
        if self.r.status_code == 404:
            print "not found 1"
            return "NOT_FOUND"
        print "yes"
        j = self.r.json()
        print j
        self.submission_id = j['model']['id']
        self.get_url = self.post_url + "/submissions/code/" + str(self.submission_id)
        self.rr = self.s.get(self.get_url, cookies = self.s.cookies)
        return self.rr

    def fetch(self,last_status):
        if self.r.status_code == 404:
            return
        self.rr = self.s.get(self.get_url, cookies = self.s.cookies)
        self.res = self.rr.json()
        if self.res['model']['status'] == 0:
            new_status = self.res['model']['status_string']
            if new_status != last_status:
                print(new_status)
            time.sleep(1)
            self.fetch(new_status)
        else:
            return

    def compiler_message(self):
        return self.res['model']['compilemessage']

    def testcase_message(self):
        return self.res['model']['testcase_message']

    def expected_output(self):
        return self.res['model']['expected_output']

    def stdin(self):
        return self.res['model']['stdin']

    def stdout(self):
        return self.res['model']['stdout']

    def dump(self):
        cm = self.compiler_message()
        tm = self.testcase_message()
        eo = self.expected_output()
        stdin = self.stdin()
        stdout = self.stdout()
        s = ""
        for i in range(len(tm)):
            s += (cm + "\n\n")
            s += ("Testcase# " + str(i) + "\n")
            s += ("Sample Input:\n\n")
            s += (stdin[i])
            s += ("\n\n")
            s += ("Your Output:\n\n")
            s += (stdout[i])
            s += ("\n\n")
            s += ("Expected Output:\n\n")
            s += (eo[i])
            s += ("\n\n")
            s += ("Compiler Message:\n\n")
            s += (tm[i])
            s += ("\n\n")
            print(s)
            return s

    def run(self):
        if self.compile_and_test() == "NOT_FOUND":
            print "not found"
            return "404 : NOT_FOUND"
        self.fetch("")
        return self.dump()

if __name__=="__main__":
    url = sys.argv[1]
    codefile = sys.argv[2]
    print url,codefile
    ext = os.path.splitext(codefile)[1]
    code = open(codefile).read()
    h = HackerRank(url,code,ext)
    h.run()

我是json和插件的新手。你能救我吗?

0 个答案:

没有答案