Экранирующие символы в данных JSON

я начинаю с

   mentions = GET(final_url, sig)
   json = content(mentions)

Мой код падает на следующей строке, которая

   json2 = jsonlite::fromJSON(toJSON(json))

Выдает ошибку...

    Error: lexical error: invalid character inside string.
      Foundation and 42nd President of the United States. Follow 
                 (right here) ------^

Я имею дело с некоторыми данными JSON. Один маленький кусочек выглядит так. То есть это вывод моей переменной "json".

    Lots of JSON before this....

    $statuses[[99]]$retweeted_status$user$location
    [1] "New York, NY"

    $statuses[[99]]$retweeted_status$user$description
    [1] "Founder, Clinton Foundation and 42nd President \003of the United                States. Follow @clintonfdn for \003more on my work around the world."

    $statuses[[99]]$retweeted_status$user$url
    [1] "http://t.co/gI8TIlAJHk"

Как видите, в один из фрагментов данных JSON встроен escape-символ \003.

Я имею дело с сотнями полезной информации в одном файле, но это может произойти где угодно, если подумать об этом сейчас. Конечно, на этот раз это произошло в «описании», но это могло произойти и в твите, в местоположении, в описании и т. д.

Есть ли способ «очистить» escape-символы из JSON, прежде чем пытаться сделать jsonlite::fromJSON(toJSON()), чтобы избежать сбоя моего кода здесь?


person Jibril    schedule 30.10.2015    source источник
comment
В одном из моих текстовых редакторов (на Mac) есть средство удаления символов, отличных от ASCII. Вы можете попробовать передать файл JSON через такой шаг редактирования.   -  person IRTFM    schedule 30.10.2015


Ответы (1)


Вы можете попробовать что-то вроде этого:

 json2 <- gsub("[\001-\026]*", "", json)

Вот простой «тест стратегии»

> gsub("[\003-\005]*", '', "\003\004\005\027abc")
[1] "\027abc"

Если вам нужен лучший тест, вы должны опубликовать вывод dput(head(json)).

person IRTFM    schedule 30.10.2015
comment
Спасибо за предложение! Я попытался преобразовать свой оригинал перед преобразованием json. То есть я сделал: json = gsub([\001-\026]*, , json ), чтобы перезаписать свою переменную json до того, как я сделал json2 = jsonlite::blahblahblah. Выполнение вашей идеи дает мне ошибку в toJSON (json): невозможно экранировать строку. Строка не utf8 - person Jibril; 30.10.2015
comment
Чтобы добавить, я попытался выполнить dput(head(json)) по запросу. Среда R содержит ошибки и отображает ее лишь частично. Я все еще довольно незнаком с этим, поэтому я не могу его предоставить. Я думаю, что ваш метод на что-то все же. Будет исследовать преобразование его в UTF8. - person Jibril; 30.10.2015
comment
Спасибо! Это сработало для меня. Было странным поведение, что ошибка utf-8 в моем сценарии R отлично работала на моей локальной рабочей станции, но не больше, когда я развернул ее на серверах. - person Simon Stolz; 14.10.2020