@SergeTkach
OpenCart Forever

Что не так с кодировкой при парсинге json из 1С в php?

Имеются следующие строки:
//$json = '[{"sku":"5200001200057","model":"516187A"},{"sku":"5200001200002","model":"521387"}]'; // work typed manually as prospekt.json 
$json   = '[{"sku":"5200001200057","model":"516187A"},{"sku":"5200001200002","model":"521387"}]'; // prospekt.json not work 

$res = json_decode($json, true); // возвращает NULL


Проверяю ошибку:
switch (json_last_error()) {
	case JSON_ERROR_NONE:
		echo ' - Ошибок нет';
		break;
	case JSON_ERROR_DEPTH:
		echo ' - Достигнута максимальная глубина стека';
		break;
	case JSON_ERROR_STATE_MISMATCH:
		echo ' - Некорректные разряды или не совпадение режимов';
		break;
	case JSON_ERROR_CTRL_CHAR:
		echo ' - Некорректный управляющий символ';
		break;
	case JSON_ERROR_SYNTAX:
		echo ' - Синтаксическая ошибка, не корректный JSON';
		break;
	case JSON_ERROR_UTF8:
		echo ' - Некорректные символы UTF-8, возможно неверная кодировка';
		break;
	default:
		echo ' - Неизвестная ошибка';
		break;
}

Выдает "Синтаксическая ошибка, не корректный JSON"

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

--
В ответе сервера по адресу нахождения нужного файла json не хватает
Content-type: application/json; charset=UTF-8

Но сам файл не генерируется в момент обращения, соответственно, заголовок charset отсутствует

--
В редакторе ideone.com при вставке json непосредственно из файла json, лишних символов, как описано в комментариях, не увидел. Но увидел их с помощью редактора FAR.
59cba72d7ef96849512851.pngРешение проблемы

Отправил снимок 1С-нику.
Ответ:
"3 первых символа - это маркер UTF-8. Преобразовывается в "артефакт" потому что считывается побитно а не как текстовый документ, поэтому считывает и этот маркер. Полечил на уровне побитных операций - удалил маркер UTF-8".
  • Вопрос задан
  • 1999 просмотров
Решения вопроса 2
При вставке в редактор ideone обнаружилось, что в вашем json-e есть какие-то артефакты))

1506093320.png

Убираем артефакты и вуаля https://ideone.com/YlDWAx
Ответ написан
@van_za
нужно решать на стороне 1с
Ответ.УстановитьТелоИзСтроки(ДанныеJSON,КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@VetalM82
На стороне php
$result = trim($result, "\xEF\xBB\xBF");
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы