Как избежать специального символа из RETS с помощью phrets?

Есть ли какой-либо механизм, позволяющий избежать нежелательных/специальных символов с сервера RETS с использованием запросов DMQL и phrets?

например: избегайте заключенных в данные двойных кавычек ("значение"). Также избегайте комбинации символов, такой как ("значение/"), это также вызывает много проблем.

Я могу сбежать после загрузки с помощью php-скрипта. Но тогда возникает вопрос, любой прямой метод, который обрабатывает такой выход из RETS, заканчивается сам собой?

Спасибо


person V-T    schedule 20.12.2016    source источник
comment
Можете ли вы объяснить, почему двойные кавычки проблематичны? Можете ли вы привести реальный пример данных, которые вызывают у вас проблемы? Вы можете управлять обработкой кодировки символов в RETS, но ваша проблема не похожа на проблему с кодировкой.   -  person GantTheWanderer    schedule 13.01.2017
comment
проблема в том, что мне нужно создать строку JSON, и это также нужно внутри CSV. поэтому либо CSV, либо JSON ломаются.   -  person V-T    schedule 19.01.2017
comment
Если предполагается, что кавычки должны быть там, вы должны избежать их в своем CSV или JSON. Я думаю, что в CSV вы можете заменить все " на "", а в JSON вы замените все " на \".   -  person GantTheWanderer    schedule 19.01.2017


Ответы (1)


Я не могу найти ничего в спецификации, которая экранирует или игнорирует символы для вас. Эта функция выходит за рамки RETS.

Реальный вопрос, который задают здесь, заключается в том, как кодировать JSON в формате CSV.

Вот строка, которую вы хотите закодировать

"one","two"

скажем, он хранится в переменной start

Давайте закодируем его как объект JSON:

jsonString = '{"data":"' + start.Replace('"','\\"') + '"}';

-> {"data":"\"one\",\"two\""}

Протестируйте его на jsonlint.com и убедитесь, что он работает в формате JSON.

Поэтому, если вам нужно сохранить это в файле CSV, вам придется снова кодировать его.

string csvJsonString = '"' + jsonString.Replace('"','""') + '"';

-> "{""data"":""\""one\"",\""two\""""}"

строка validCsv = csvJsonString + "," + csvJsonString

-> "{""data"":""\""one\"",\""two\""""}","{""data"":""\""one\"",\""two\""""}"

Проверьте это на csvlint.io и убедитесь, что это действительный CSV.

На этом этапе строка validCsv, конечно, больше не является допустимым JSON, она должна быть проанализирована программой чтения CSV обратно в JSON.

person GantTheWanderer    schedule 19.01.2017
comment
Требование состоит в том, что для одного из столбцов CSV требуется строка JSON. Так что, как и ваш комментарий к моему вопросу, если я сбегу с ним, проблема с CSV будет решена, а не со строкой JSON внутри csv. Для исправления JSON снова, как вы сказали, \ сломает csv (например: {SortAs: SGML, Условия: один, два, три, sqft: 20'6}). Эти сценарии делают перерыв - person V-T; 24.01.2017
comment
в приведенном выше примере, если я убегаю, это будет выглядеть как {SortAs: SGML, Условия: \one\,\two\,\three\,sqft: 20'6\} комбинация \, нарушит CSV - person V-T; 24.01.2017
comment
Проверьте ответ для деталей. Вы не можете ожидать, что результирующая строка будет одновременно совместима с JSON и CSV. Сначала данные должны быть закодированы в JSON, а затем этот JSON должен быть закодирован в CSV. Когда файл прочитан, программа чтения CSV распаковывает все, после чего вы снова можете получить доступ к действительному JSON. - person GantTheWanderer; 24.01.2017