2016-09-14 7 views
10

私はPythonでJSONオブジェクトを読み込むための良い方法を見つけようとしています。それは、私はそれを解析するためにjson.loads(data)を使用する文字列として受信されるバックエンドにPython/Json:プロパティ名が二重引用符で囲まれています

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

: 私はこのJSONデータを送信します。

しかし、私は同じ例外だ毎回:

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

は、私はそれをグーグルが、何もそれもものをあらゆる種類のデータを受け入れるので、個人的に私のためにそれは効率的ではないようです。このソリューションjson.loads(json.dumps(data))以外にも動いていないようにみえjson形式ではありません。

ご提案は大変ありがとうございます。

答えて

23

このast.literal_eval()を使用することができます。

{'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です。

+0

Thanx :)私は、データを送信するときに正しいjson形式を使用していますが、バックエンドで受け取ったときに二重引用符が単一のものに置き換えられます。したがって、私はその例外を持っています。 – raeX

4

かなり単純に、その文字列は有効なJSONではありません。エラーが示すように、JSONドキュメントでは二重引用符を使用する必要があります。

データのソースを修正する必要があります。

3

JSON文字列には二重引用符を使用する必要があります。 JSONのpythonライブラリがこれを強制するので、あなたの文字列を読み込むことができません。あなたのデータは、このように見える必要があります:それはあなたが行うことができるものでない場合は

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

は、あなたの代わりにjson.loads()

+3

これはPythonライブラリの制限ではなく、JSONフォーマット自体の制限です。 –

+0

あなたは正しいです。ただし、一部のJSONパーサーでは二重引用符を使用しません。私は私の答えを更新します。 – alexbclay

+0

が提供されていれば、JSONには一重引用符で囲まれた文字列の中に二重引用符が含まれていないので、 'json.loads()'を呼び出す前に文字列をdoubleに置き換えてください。 – nigel222

3

私はあなたのJSONデータ

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

をチェックしましたし、結果は以下の通りであった。

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

:次の文字列にそれを修正する

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

はJSONエラーを解決します明らかに間違っているように、名前は二重引用符で囲む必要があります一重引用符。渡す文字列は有効なJSONではありません。

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