2012-03-07 3 views
0

: s2하지만 s1는 대한 내가 json.loads 할 때파이썬 문자열 json.loads 사이의 difrence 무엇 오류

  1. s1 = '["a"]'

  2. s2 = "['a']"

, 나는 다음과 같은 얻을 오류가 괜찮음 :

>>> s1='["a2"]' 
>>> s2="['a2']" 
>>> json.loads(s1) 
[u'a2'] 
>>> json.loads(s2) 
raise ValueError("No JSON object could be decoded") 
ValueError: No JSON object could be decoded 
+0

저는'json'에 익숙하지 않지만이 메소드는 특정 입력 문자열 형식이 필요합니까? – lllluuukke

+0

코드와 예외 정보를 수정하십시오 -'s1'을 두 번 정의했기 때문에 예외는'NameError'이어야하지만's2'는 정의하지 않습니다. 정확히 무엇을 보았는지 보여주기 위해 코드를 수정하십시오. – Tadeck

+1

@Ashish : 알겠습니다. 질문을 수정하고 형식을 지정했습니다. – Tadeck

답변

7

문제는 JSON은 인용 값이 아닌 하나의 사람 (')에 대한 따옴표 (")를 사용합니다. ['a']

  • 이 유효 JSON이다 : ["a"]
  • 은 또한 적절한 예는 이하이고, 다른 예외를 의미

    잘못되어 JSON의 발생된다

    • 무효 인 JSON이고 귀하의 것보다 :

      >>> import json 
      >>> s1 = "['a']" 
      >>> s2 = '["a"]' 
      >>> json.loads(s1) 
      ... some traceback removed ... 
      ValueError: No JSON object could be decoded 
      >>> json.loads(s2) 
      [u'a'] 
      

      EDIT : 정확한 출력으로 질문을 업데이트했습니다. OP가 게시 한 내용 대신에 표시해야합니다 (json.loads('["a2"]')은 오류를 던지지 않고 json.loads("['a2']")).

    3

    json 따옴표는 파이썬처럼 교환 할 수 없습니다. 두 번째 케이스 "에서

    >>> import json 
    >>> print json.dumps("['a']") 
    "['a']" 
    >>> print json.dumps('["a"]') 
    "[\"a\"]" 
    

    이스케이프 할 필요가