source

Python/Json:큰따옴표로 둘러싸인 속성 이름이 필요합니다.

factcode 2022. 10. 14. 22:38
반응형

Python/Json:큰따옴표로 둘러싸인 속성 이름이 필요합니다.

Python에서 JSON 객체를 로드하는 좋은 방법을 찾고 있습니다.다음 json 데이터를 보냅니다.

{'http://example.org/about': {'http://purl.org/dc/terms/title': [{'type': 'literal', 'value': "Anna's Homepage"}]}}

, 「」를 했습니다.json.loads(data)해석할 수 있습니다.

하지만 매번 같은 예외를 받았습니다.

ValueError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

이 방법 외에는 것 .json.loads(json.dumps(data))개인적으로는 json 형식이 아닌 데이터도 모두 수용하기 때문에 그다지 효율적이지 않은 것 같습니다.

어떤 제안이라도 해주시면 감사하겠습니다.

이것은, 다음과 같습니다.

{
    'http://example.org/about': {
        'http://purl.org/dc/terms/title': [
            {'type': 'literal', 'value': "Anna's Homepage"}
        ]
     }
}

JSON이 아닙니다.
이, 이, 이, 이, 이, 이, 이, 이.

{
     "http://example.org/about": {
         "http://purl.org/dc/terms/title": [
             {"type": "literal", "value": "Anna's Homepage"}
          ]
      }
}

JSON 입니다.

★★★★★★
일부 논객들은 위와 같이 충분하지 않다고 제안했다.
JSON 사양 - RFC7159 에서는 문자열이 따옴표로 시작되어 끝난다고 기술되어 있습니다.즉,
단일 quoute는 JSON에서 의미적인 의미는 없으며 문자열 내에서만 허용됩니다.

JSON 에서는 큰따옴표로 둘러싸인 문자열만 허용되므로 다음과 같이 문자열을 조작할 수 있습니다.

str = str.replace("\'", "\"")

이 이스케이프된 따옴표(JSON)를 하고 있는 \'그럼 보다 정확한 다음 코드를 사용해야 합니다.

import re
p = re.compile('(?<!\\\\)\'')
str = p.sub('\"', str)

로 모두 됩니다.str후자의 경우 이스케이프된 싱글 소켓을 대체하지 않습니다.

이 경우에도 하실 수 있습니다.js-beautify" " " 이이 、 " 격격 :

$ pip install jsbeautifier
$ js-beautify file.js
import ast

inpt = {'http://example.org/about': {'http://purl.org/dc/terms/title':
                                     [{'type': 'literal', 'value': "Anna's Homepage"}]}}

json_data = ast.literal_eval(json.dumps(inpt))

print(json_data)

이것이 문제를 해결할 것이다.

제 경우 큰따옴표는 문제가 되지 않았습니다.

마지막 콤마에서도 같은 에러 메세지가 표시된다.

{'a':{'b':c,}}
           ^

이 쉼표를 제거하기 위해 간단한 코드를 작성했습니다.

import json

with open('a.json','r') as f:
    s = f.read()
    s = s.replace('\t','')
    s = s.replace('\n','')
    s = s.replace(',}','}')
    s = s.replace(',]',']')
    data = json.loads(s)

그리고 이건 나한테 효과가 있었어.

솔루션 1 (매우 위험)

python eval 기능을 사용하면 됩니다.

parsed_json = eval(your_json)

솔루션 2 (위험 없음)

기본적으로 python에 포함된 ast 라이브러리를 사용할 수 있으며 식을 안전하게 평가할 수도 있습니다.

import ast

parsed_json = ast.literal_eval(your_json)

간단히 말하면, 이 문자열은 유효한 JSON이 아닙니다.오류와 같이 JSON 문서는 큰따옴표를 사용해야 합니다.

데이터 소스를 수정해야 합니다.

JSON 데이터를 확인했습니다.

{'http://example.org/about': {'http://purl.org/dc/terms/title': [{'type': 'literal', 'value': "Anna's Homepage"}]}}

결과는 다음과 같습니다.

Error: Parse error on line 1:
{   'http://example.org/
--^
Expecting 'STRING', '}', got 'undefined'

다음 문자열로 수정하면 JSON 오류가 해결됩니다.

{
    "http://example.org/about": {
        "http://purl.org/dc/terms/title": [{
            "type": "literal",
            "value": "Anna's Homepage"
        }]
    }
}

JSON 문자열은 큰따옴표를 사용해야 합니다.JSON python 라이브러리는 이 기능을 적용하므로 문자열을 로드할 수 없습니다.데이터는 다음과 같아야 합니다.

{"http://example.org/about": {"http://purl.org/dc/terms/title": [{"type": "literal", "value": "Anna's Homepage"}]}}

할 수 , '어느 정도'를 사용해도 .ast.literal_eval()json.loads()

x = x.replace("'", '"')
j = json.loads(x)

이것이 올바른 해결책이지만, 이와 같은 JSON이 있으면 상당히 골칫거리가 될 수 있습니다.

{'status': 'success', 'data': {'equity': {'enabled': True, 'net': 66706.14510000008, 'available': {'adhoc_margin': 0, 'cash': 1277252.56, 'opening_balance': 1277252.56, 'live_balance': 66706.14510000008, 'collateral': 249823.93, 'intraday_payin': 15000}, 'utilised': {'debits': 1475370.3449, 'exposure': 607729.3129, 'm2m_realised': 0, 'm2m_unrealised': -9033, 'option_premium': 0, 'payout': 0, 'span': 858608.032, 'holding_sales': 0, 'turnover': 0, 'liquid_collateral': 0, 'stock_collateral': 249823.93}}, 'commodity': {'enabled': True, 'net': 0, 'available': {'adhoc_margin': 0, 'cash': 0, 'opening_balance': 0, 'live_balance': 0, 'collateral': 0, 'intraday_payin': 0}, 'utilised': {'debits': 0, 'exposure': 0, 'm2m_realised': 0, 'm2m_unrealised': 0, 'option_premium': 0, 'payout': 0, 'span': 0, 'holding_sales': 0, 'turnover': 0, 'liquid_collateral': 0, 'stock_collateral': 0}}}}

"진짜" 값 알아차렸습니까?이것을 사용하여 Bohans에 대해 두 번 확인하도록 합니다.이러한 케이스에는 다음이 포함됩니다.

x = x.replace("'", '"').replace("True", '"True"').replace("False", '"False"').replace("null", '"null"')
j = json.loads(x)

또, 그 때, 그 때리지 않도록 주의해 주세요.

x = json.loads(x)

다른 변수여야 합니다.

json 하려면 " dict use"를 사용합니다.ast.literaleval()

>>> import ast
>>> payload = "{'hello': 'world'}"
>>> ast.literal_eval(payload)
{'hello': 'world'}
>>> type(ast.literal_eval(payload))
<class 'dict'>

그러면 payload가 python dict로 변환됩니다.

분명히 잘못 기재되어 있듯이, 이름은 작은 따옴표 대신 큰 따옴표로 묶어야 합니다.전달한 문자열은 유효한 JSON이 아닙니다.이렇게 생겼으면 좋겠는데

{"http://example.org/about": {"http://purl.org/dc/terms/title": [{"type": "literal", "value": "Anna's Homepage"}]}}

이 방법을 사용하여 원하는 출력을 얻을 수 있었습니다.내 스크립트

x = "{'inner-temperature': 31.73, 'outer-temperature': 28.38, 'keys-value': 0}"

x = x.replace("'", '"')
j = json.loads(x)
print(j['keys-value'])

산출량

>>> 0
with open('input.json','r') as f:
    s = f.read()
    s = s.replace('\'','\"')
    data = json.loads(s)

이것은 나에게 완벽하게 효과가 있었다.감사해요.

.json5패키지 https://pypi.org/project/json5/ 대신json이 패키지는 작은 따옴표를 처리할 수 있습니다.는 「」입니다.json5.loads(data) 이 글과 .json★★★★★★★★★★★★★★★★★★.

아래 코드 조각은 데이터를 JSON으로 변환하는 데 도움이 됩니다.데이터jsonify하기 위해 모든 단일 따옴표를 이중 따옴표로 변환해야 합니다.

data = {
"http://example.org/about": {
    "http://purl.org/dc/terms/title": [{
        "type": "literal",
        "value": "Anna's Homepage"
    }]
}}
parsed_data = data.replace("'", '"')
data_json = json.loads(parsed_data)

저도 비슷한 문제가 있었어요.서로 통신하는 2개의 컴포넌트가 큐를 사용하고 있었습니다.

첫 번째 컴포넌트는 메시지를 큐에 넣기 전에 json.dumps를 실행하고 있지 않았습니다.따라서 수신 컴포넌트에 의해 생성된 JSON 문자열은 작은 따옴표로 둘러싸여 있었습니다.이로 인해 오류가 발생했습니다.

 Expecting property name enclosed in double quotes

json.dumps를 추가하면 올바른 형식의 JSON이 생성되어 문제가 해결되었습니다.

다른 답변이 잘 설명하듯이 json 모듈에 전달된 잘못된 따옴표로 인해 오류가 발생합니다.

ValueError를 하였습니다.'"내 문자열에 입니다.마침내 깨달은 것은 인용문과 같은 유니코드 기호가 내 문자열에 삽입되었다는 것이다.

 “  ”  ‛  ’  ‘  `  ´  ″  ′ 

이 모든 것을 소거하려면 , 정규 표현에 문자열을 건네기만 하면 됩니다.

import re

raw_string = '{“key”:“value”}'

parsed_string = re.sub(r"[“|”|‛|’|‘|`|´|″|′|']", '"', my_string)

json_object = json.loads(parsed_string)

빠른 수정이 필요한 경우 모든 작은 따옴표를 큰 따옴표로 대체하면 됩니다.

import json 

predictions = []

def get_top_k_predictions(predictions_path):
    '''load the predictions'''
    
    with open (predictions_path) as json_lines_file:
        for line in json_lines_file:
            predictions.append(json.loads(line.replace("'", "\"")))
            
    
get_top_k_predictions("/sh/sh-experiments/outputs/john/baseline_1000/test_predictions.jsonl")

큰따옴표를 사용하여 dict를 문자열로 변환하는 데 문제가 있는 경우 다음과 같이 하십시오.

json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')

json.documents

json 구문에는 각 "key" 및 "value"에 따옴표가 필요합니다.그 때문에, 매우 견고한 데이터 형식이 됩니다.다음 예제에서는 색상과 색상을 키로 사용하고 있습니다.

{"colors":[
  {
     "color":"red",
     "value":"#f00"
  },
  {
     "color":"green",
     "value":"#0f0"
  },
  {
     "color":"blue",
     "value":"#00f"
  },
  {
     "color":"cyan",
     "value":"#0ff"
  },
  {
     "color":"magenta",
     "value":"#f0f"
  },
  {
     "color":"yellow",
     "value":"#ff0"
  },
  {
     "color":"black",
     "value":"#000"
  }]}

JSON prettifier와 같은 json prettify 툴을 사용하면 JSON 파일에서 발생한 쉼표 오류 수정에 도움이 되므로 사용을 적극 추천합니다.

저도 같은 문제가 있어서 큰따옴표를 큰따옴표로 대체했는데, 더 나쁜 것은 json 객체의 마지막 속성에 쉼표를 찍었을 때 같은 오류가 발생했다는 것입니다.하여 python의 regex를 한 후 python의 regex를 사용했습니다.json.loads()loads'('loads')의말미에 )

import re

with open("file.json", 'r') as f:
     s = f.read()
     correct_format = re.sub(", *\n *}", "}", s)
     data_json = json.loads(correct_format)

사용된 regex는 각 쉼표 뒤에 줄 바꿈과 "}"을 반환하며 "}"로 대체합니다.

판다의 중첩된 JSON 기둥을 정상화하는 과정에서 오류가 발생했습니다.@Reihan_amn에서 알 수 있듯이 모든 작은 따옴표를 큰 따옴표로 바꾸면 실제 내용에 영향을 줄 수 있습니다.따라서 이 에러가 발생했을 경우는, 이 에러만을 교환해 주세요.' 그 장소입니다."는 JSON 구문이어야 합니다.다음과 같은 정규 표현을 사용하여 수행할 수 있습니다.

import re
import json

invalid_json = """{'http://example.org/about': {'http://purl.org/dc/terms/title': [{'type': 'literal', 'value': "Anna's Homepage"}]}}"""

valid_json = re.sub( "(?<={)\'|\'(?=})|(?<=\[)\'|\'(?=\])|\'(?=:)|(?<=: )\'|\'(?=,)|(?<=, )\'", "\"", invalid_json)

print(json.loads(valid_json))

하나의 가 작은따옴표(따옴표)가 있는 합니다.')는가 있었다."포맷이 잘못된 원래 JSON 문서에 있어야 합니다.그러나 JSON 구문의 일부가 아닌 이중 따옴표가 문서에 있는 경우에도 오류가 발생합니다.이 경우 4단계 솔루션을 제안합니다.

  1. JSON의 regex가 됩니다).' ★★★★★★★★★★★★★★★★★」"★★★★★★★★★★★★★★★★★★」

  2. 모든(왼쪽) 큰따옴표를 문서에 없는 특수 문자로 바꿉니다.`` 하면 re.sub("\"", "``", x).

  3. 위의 regex를 사용하여 JSON의 큰따옴표가 있어야 하는 모든 작은따옴표를 큰따옴표로 바꿉니다.

수 .pd.json_normalize(df["json_col"].apply(json.loads)).

  1. 당신이 모든 을 다시 수 있습니다.`` 문자)와 (또는 특수 문자)가 함께 표시됩니다.".

문제는 JSON 스니펫을 복사해서 붙여 넣었는데, 사용된 큰따옴표는 왠지 다른 인식되지 않는 큰따옴표였습니다.큰따옴표를 교체한 결과, 제 파일은 유효한 JSON이었습니다.

예를 들면 쉽다

import json

my_str = '{"message_type": "fixed_price_difference", "message": "Hello hello"}'

print(type(json.loads(my_str)), json.dumps(my_str))

Output:
    <class 'dict'> "{\"message_type\": \"fixed_price_difference\", \"message\": \"Hello hello\"}"

예를 들어 구문은 매우 중요합니다.

않음: " " " " " " " " " " " :my_str = "{'message_type': 'fixed_price_difference', 'message': 'Hello hello"}'

구문: " " " " "my_str = '{"message_type": "fixed_price_difference", "message": "Hello hello"}'

Final : 문자열이 따옴표로 시작되어 끝남을 나타냅니다.

문자열이 유효한 JavaScript 개체이므로 Js2Py 라이브러리를 사용할 수 있습니다.

import js2py

content = """x = {'http://example.org/about': {'http://purl.org/dc/terms/title': [{'type': 'literal', 'value': "Anna's Homepage"}]}}"""
content = js2py.eval_js(content)

print(content.to_dict())

하다를 사용하세요.eval★★★★★★ 。

작은따옴표와 큰따옴표 사이의 불일치를 처리합니다.

입니다.json.dumps() 저는 다음 사용했습니다.

json.dumps(YOUR_DICT_STRING).replace("'", '"')

JSON이 수작업으로 편집되었을 때 여러 번 이 문제에 부딪혔습니다.만약 누군가가 그것을 알아차리지 못하고 파일에서 무언가를 삭제한다면, 같은 오류가 발생할 수 있습니다.

예를 들어, JSON의 마지막 "}"이(가) 누락된 경우 동일한 오류가 발생합니다.

따라서 수동으로 파일을 편집할 경우 JSON 디코더가 예상하는 포맷과 동일하게 포맷해야 합니다.그렇지 않으면 동일한 문제가 발생합니다.

언급URL : https://stackoverflow.com/questions/39491420/python-jsonexpecting-property-name-enclosed-in-double-quotes

반응형