to post messages and comments.

Переоценил я libyaml. Думал, универсальный движок и для JSON, и для YAML, но обнаружились нюансы.

Почему-то сложно оказалось добиться от libyaml форматированного JSON. Что-то я смутно припоминаю, что там чуть ли не реконструировать весь синтаксис оригинального документа можно было вместе с пробелами и табуляциями. Настолько можно всем порулить. И не нашёл, где это было. Надо отступы в поточный синтаксис (соответствующий подмножеству JSON) добавить, и никак. Только в блочном синтаксисе отступы есть. Хакнул libyaml, получил такое:

[4.0, "abc"
, {"x": -5.0, "z": 20.0
}
]

Скаляры где-то в другом буфере копятся. Если пытаться делать переносы перед ними, то перед «, {"x"» становится больше переносов.

Утверждается, что YAML синтаксически — надмножество JSON, и если загнать JSON в парсер YAML, то всё прочитается. На практике получается, что libyaml спотыкается на \/ в строке. Вообще говоря, экранировать прямую косую черту нужно только в HTML, чтоб там </script> ненароком не получился, а если Content-Type: application/json; charset=utf-8, то смысла нет, но некоторые движки на всякий пожарный всё равно экранируют.

There's Json in System.Web.Helpers, there's JsonQueryStringConverter in System.ServiceModel.Web, there's JavascriptSerializer in System.Web.Script.Serialization, DataContractJsonSerializer in System.Runtime.Serialization.Json, heck MS has even decided to include third party Json.NET in its ASP.NET Web API. If you thought that wasn't enough, MS is coming up with System.Json but currently is unfit for consumption. Way to go Microsoft way to go.... I choose by the best looking namespace. – nawfal

Надо перекодировать JSON строку. Вот строка: '"[{"text":"22","correct":false},{"text":"33","correct":false},]"'. В PHP:
$s = json_decode($json, TRUE);
print_r($s);
И ничего! После php -f code.php нихера. Берем Python и print(json.loads('"[{"text":"22","correct":false},{"text":"33","correct":false},]"')) и в ответ получаем сообщение ValueError: Extra data: line 1 column 5 — line 1 column 93 (char 4 — 92). Вот. Вот! Оказывается что в строке есть лишние кавычки и нужно чтобы было '[{"text":"22","correct":false},{"text":"33","correct":false},]'. Но что же PHP? Есть функция json_last_error которая возвращает int и в документации к которой есть такой код: foreach ($json as $string) {
echo 'Decoding: ' . $string;
json_decode($string);

switch (json_last_error()) {
case JSON_ERROR_NONE:
echo ' — No errors';
break;
case JSON_ERROR_DEPTH:
echo ' — Maximum stack depth exceeded';
break;
………………………………

Кто может помочь с разбором json, пожалуйста?
Есть массив, полученный из яндекс карт вида:
$json = '{"polygons":[{"coords":[[[51.66524722349841,39.261860555541965],[51.663886141991874,39.2623540820007],[51.66519384852736,39.2639204920654],[51.66524722349841,39.261860555541965]]],"params":{"strokeWidth":"3","strokeColor":"blue","balloonContent":"dsf","opacity":"0.6","fillColor":"lightblue"}}],"lines":[],"routes":[]}';
Вот отсюда надо получить координаты. Что я делаю? var_dump ($json->poligons[0]['coords']);
Где я ошибся?

Наконец я навел немного автоматизации и красивости на ферме.

Во-первых, у меня периодически отваливается несколько ежиков. Я сделал задачу в cron каждые 12 часов перезапускать их. Думаю, должно помочь, если нет — попробую каждые 4. Если опять не поможет, надо будет придумать способ отслеживать их состояние.
Да, с cron'ом метод весьма топорный, но простой и, наверно, надежный.

Во-вторых, красивости. Тут conky+python. Я уже писал и показывал скрипт, который мне статистику показывает, забирая ее через api пула в json. Сейчас я переделал тот скрипт, он получился чуть более универсальный и, как мне кажется, более грамотный(хотя все равно, наверняка, говнокод еще тот). Плюс скрипт ведет лог — просто пишет полученный json в файл и клеит к нему таймстамп(в формате '%d.%m.%Y %H:%M:%S').
Так же баш-скрипт, который запускает асики, пишет в тот же лог-файл сообщения о том, что он запускался. Так же клеит в начало таймстамп. Весь лог файл в json-формате ведется. Вот не знаю почему, но мне понравился этот формат — довольно просто работать, в определенной мере легко читается пользователем.

//На счет json'a, похоже я идиот и изобрел велосипед — сделал свой парсер для json, не покурив json.dumps(), оно оказывается умеет выводить красиво, с отступами и переносами строк. Погуглил это, пока писал пост.

Жуйк, я не умею в ангельский. К величайшему сожалению. Скажи, ты знешь, где можно своровать хорошую книгу по JSON? Только без "чайников" и "для вашего сайта за 24 часа", угу?

@ugnich почини JSON в сообщениях с несколькими абзацами.
Сейчас идёт так: "body": "Украина — суть шагреневая кожа.
\nПока потаенные желания украинствующих не выражаются вслух, — она цела..."
Должно быть так: "body": "Украина — суть шагреневая кожа.\nПока потаенные желания украинствующих не выражаются вслух, — она цела..."
Я ясно выражаюсь?

жуйк, посоветуй системку на хадупе (или самостоятельную), которая позволяет делать SQL-подобные запросы по неструктурированным данным (хранятся сейчас в JSON'е, перегнать в любой другой формат не проблема). В принципе, подойдут и запросы по типу монговских, но SQL предпочтительнее в данном случае. Сами запросы должны поддерживать фильтрацию, группировку, сортировку и стандартный набор аггрегирующих функций

Жуйк, а кто-нибудь знает альтернативу Universal Widget?
play.google.com
Ну это такой замечательный виджет, которому можно указать урл, откуда он будет хватать заранее подготовленный JSON и выводить красивенько на экран.
Автор Universal Widget, походу, на него забил. Может, есть живые варианты?

Я, например, хочу себе немного мониторинга и погоду за собственным окном с датчика. Такой виджет был бы идеальным решением.

бэкпортнул поддержку выхлопа в JSON в avprobe для wheezy/jessie. По-умолчанию продолжает использоваться старый формат (sic!), json/ini можно врубить через опцию -of (как в ветке 9.х самого libav). Пакеты будут в репе через часок, берите кому надо.

Именно так, а не иначе приходится приводить строку, чтобы json не плюнул молча null в ответ:
$message = iconv("Windows-1251","UTF-8",iconv("UTF-8","Windows-1251",@mysql_result($res,$i,"message")));

скажите люди добрые, вот хочется странного — хочется написать juick-клиента, который бы общался с сервером только через HTTP и соответственно JSON. и без всяких XMPP. это извращение или не очень? только аргументированно

есть ссылка на доку dotnet + json strathweb.com
у меня отображается
"...Сетевой адрес, позволяющий идентифицировать сайт в сети «Интернет», включен в Единый Реестр доменных имен.... или Доступ ограничен по решению суда...."
в России теперь нельзя юзать json по решению суда?

Вышла новая версия спеки про JSON Patch:
tools.ietf.org
Много хороших уточнений, но на этот раз они "взяли и все сломали": сделали список ключей фиксированным, что в общем-то и правильно, но стало многословней.