Как избавиться от вложенной двойной кавычки в подполе «имя»? - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь прочитать следующую строку в словарь, используя пакет Python json

Однако под одним из подполей 'name' есть описание с вложенной двойной кавычкой.Мой JSON не может прочитать строку таким образомSunshine Makers "

Как мне избавиться от этой двойной кавычки?

Еще примеры строк, вызывающих ошибку

string2 = '{"id":960066,"project_id":960066,"state":"active","state_changed_at":1502049940,"name":"New J. Lye Album - Behind The Lyes","blurb":"I am working on my new project titled "Behind The Lyes" which is coming out fall of 2017."'

#The problem with this string comes from the nested double quote around the pharse "Behind The Lyes inside" the 'blurb' subfield 

1 Ответ

0 голосов
/ 08 февраля 2019

Обратите внимание, что в вашей строке более одной проблемы, делающей ее недействительной JSON:

Ошибка, которую вы видите - \xa0 (неразрывный пробел).Это необходимо устранить до того, как проблема "" станет проблемой.

В вашей строке отсутствует закрывающий }.

Тем не менее, для строки, которую вы цитировали первой, однаподход к решению ваших проблем заключается в использовании .replace():

string1 = '{"id":17033,"project_id":17033,"state":"active","state_changed_at":1488054590,"name":"a.k.a.:\xa0"The Sunshine Makers""'.replace('\xa0"', "'").replace('""', "'\"") + '}'

Например, следующее обрабатывает двойные кавычки и другие проблемы в ваших двух примерах:

import json 

fixes = [('\xa0', ' '),('"',"'"),("{'",'{"'),("','", '","'),(",'", ',"'),("':'", '":"'),("':", '":'),("''", '\'\"'), ("'}",'"}')]

print(fixes)
string1 = '{"id":17033,"project_id":17033,"state":"active","state_changed_at":1488054590,"name":"a.k.a.:\xa0"The Sunshine Makers""'
string2 = '{"id":960066,"project_id":960066,"state":"active","state_changed_at":1502049940,"name":"New J. Lye Album - Behind The Lyes","blurb":"I am working on my new project titled "Behind The Lyes" which is coming out fall of 2017."'
strings = [string1, string2]

for string in strings:
    print(string)
    string = string + '}'
    for fix in fixes:
        string = string.replace(*fix)
    print(string)
    print(json.loads(string)['name'])

Itбыло бы полезно, если бы вы могли заполнить свой вопрос кодом или файлом, из которого вы извлекаете эти строки.Это позволило бы дать более полный ответ.

...