Author

Topic: JSON - нафиг он? (Read 5077 times)

sr. member
Activity: 868
Merit: 251
April 13, 2011, 04:42:13 AM
#30
А какие там зубодробительные команды-то? Команды у вас, я смотрю, как были, так и остались стандартные - listaccounts и т.п. А читать хорошо отформатированный (с пробелами и отступами, которые в стандарте не обязательны) JSON, который выводит bitcoin, я умею и так, без удаления синтаксиса.
Метод скорочтения в этом, кстати, хорошо помогает, очень кошерно, рекомендую попробовать. Wink
Вообще для такой задачи я бы применил PHP - там есть отличные средства для работы с JSON. А то jsawk какой-то зачем-то... Первый раз увидел. В моей системе оный, например, отсутствует.
sr. member
Activity: 350
Merit: 252
probiwon.com
April 13, 2011, 04:31:28 AM
#29
А зачем это всё?
(аж передёрнуло от ужаса)
Я думал, в браузер вываливать список собираетесь...


Очень кошерно, рекомендую попробовать! Чтобы сидючи в консоли не вбивать зубодробительные команды ручками пользительно сие.
sr. member
Activity: 868
Merit: 251
April 13, 2011, 01:34:44 AM
#28
А зачем это всё?
(аж передёрнуло от ужаса)
Я думал, в браузер вываливать список собираетесь...
sr. member
Activity: 350
Merit: 252
probiwon.com
April 12, 2011, 11:45:45 PM
#27
Ну так
Code:
for(name in obj) { ... obj[name] ... }
же...
Это ж классика ECMAScript.

Да и вообще JSON и есть JavaScript Object Notation, он для яваскрипта родной в доску. Тут сложностей вообще никаких, когда язык знаешь.

А я не знаю.

Вот запилил пока такое - работает:

bitcoin listaccounts | jsawk  -n 'out(this)' | perl -pe 's/(\{|)"(.*?)":.+?(,|\})/$2\n/g'

jsawk умеет яваскрипт, было бы здорово его средствами сделать вывод списка аккаунтов

скрипт
sr. member
Activity: 868
Merit: 251
April 12, 2011, 04:45:47 PM
#26
Ну так
Code:
for(name in obj) { ... obj[name] ... }
же...
Это ж классика ECMAScript.

Да и вообще JSON и есть JavaScript Object Notation, он для яваскрипта родной в доску. Тут сложностей вообще никаких, когда язык знаешь.
sr. member
Activity: 350
Merit: 252
probiwon.com
April 12, 2011, 08:20:08 AM
#25
Code:
$ bitcoin listaccounts
{
    "" : -1821.34000000,
    "GAssad" : 0.01000000,
    "Imperfection Imperfection" : 0.00000000,
    "Johan Euphrosine" : 60.00000000
}
Как в JavaScript это пропарсить чтобы получить список GAssad, Imperfection Imperfection, Johan Euphrosine
Code:
obj=eval('('+JSONtext+')');
GAssad=obj.GAssad;
Как-то так...

а как я имя объекта (GAssad) узнаю?
sr. member
Activity: 868
Merit: 251
April 12, 2011, 06:30:06 AM
#24
Code:
$ bitcoin listaccounts
{
    "" : -1821.34000000,
    "GAssad" : 0.01000000,
    "Imperfection Imperfection" : 0.00000000,
    "Johan Euphrosine" : 60.00000000
}
Как в JavaScript это пропарсить чтобы получить список GAssad, Imperfection Imperfection, Johan Euphrosine
Code:
obj=eval('('+JSONtext+')');
GAssad=obj.GAssad;
Как-то так...
full member
Activity: 185
Merit: 100
April 12, 2011, 05:44:48 AM
#23
Собственно не понятно зачем парсить именно cli в консоли (ну кроме как для тестов), если нормально работает rpc.
А уж к rpc делать запросы можно откуда угодно и везде есть библиотеки.

Слишком много прав rpc даёт. Взломают ПХП код - унесут биткоины.

Надо делать "прокладку" через sudo, например, которая позволит только проверить баланс, но не sendtoaddress.

Ну разве что... однако если пхп код дыряв можно и с сервера утащить все. Было бы желание, а дырки найдутся.
Тут только один вариант более мене надежен, вынос биткоина в другое место и проведение тразакций руками.

p.s. не читайте советских газет (не используйте php код) Smiley


Я бы сказал "не используйте кривые руки". Причем тут PHP код? Как будто он более уязвим чем любой другой код.
sr. member
Activity: 350
Merit: 252
probiwon.com
April 12, 2011, 12:27:55 AM
#22
Code:
$ bitcoin listaccounts
{
    "" : -1821.34000000,
    "GAssad" : 0.01000000,
    "Imperfection Imperfection" : 0.00000000,
    "Johan Euphrosine" : 60.00000000
}

Как в JavaScript это пропарсить чтобы получить список GAssad, Imperfection Imperfection, Johan Euphrosine

?

делаю автокомплит для баша - понадобилось
sr. member
Activity: 868
Merit: 251
March 24, 2011, 12:20:25 PM
#21
Я вообще предпочитаю YAML, но и JSON весьма удобен.
sr. member
Activity: 350
Merit: 252
probiwon.com
March 24, 2011, 10:29:22 AM
#20
Собственно не понятно зачем парсить именно cli в консоли (ну кроме как для тестов), если нормально работает rpc.
А уж к rpc делать запросы можно откуда угодно и везде есть библиотеки.

Слишком много прав rpc даёт. Взломают ПХП код - унесут биткоины.

Надо делать "прокладку" через sudo, например, которая позволит только проверить баланс, но не sendtoaddress.

Ну разве что... однако если пхп код дыряв можно и с сервера утащить все. Было бы желание, а дырки найдутся.
Тут только один вариант более мене надежен, вынос биткоина в другое место и проведение тразакций руками.

Нет, не руками. "Прокладка" действительно в этом случае хорошо работает
hero member
Activity: 742
Merit: 500
BTCDig - mining pool
March 24, 2011, 10:26:13 AM
#19
Собственно не понятно зачем парсить именно cli в консоли (ну кроме как для тестов), если нормально работает rpc.
А уж к rpc делать запросы можно откуда угодно и везде есть библиотеки.

Слишком много прав rpc даёт. Взломают ПХП код - унесут биткоины.

Надо делать "прокладку" через sudo, например, которая позволит только проверить баланс, но не sendtoaddress.

Ну разве что... однако если пхп код дыряв можно и с сервера утащить все. Было бы желание, а дырки найдутся.
Тут только один вариант более мене надежен, вынос биткоина в другое место и проведение тразакций руками.

p.s. не читайте советских газет (не используйте php код) Smiley
sr. member
Activity: 294
Merit: 250
я не ламер, я java-прогаммер :-)
March 24, 2011, 10:24:23 AM
#18
А мне, как java-программеру, JSON нравится. Из него просто и легко поднять класс при помощи сторонних библиотек, а класс - они есть класс  Smiley
member
Activity: 94
Merit: 10
March 24, 2011, 09:19:23 AM
#17
JSON затем, что в браузерах везде javascript. А JSON - нативный javascript и есть. И никто парсилки для всяких там XML в AJAX-приложениях писать не будет, ибо они только замедлят скорость работы приложения. Посему переходите на JSON и будет вам счастье.
sr. member
Activity: 350
Merit: 252
probiwon.com
March 24, 2011, 08:53:41 AM
#16
Собственно не понятно зачем парсить именно cli в консоли (ну кроме как для тестов), если нормально работает rpc.
А уж к rpc делать запросы можно откуда угодно и везде есть библиотеки.

Слишком много прав rpc даёт. Взломают ПХП код - унесут биткоины.

Надо делать "прокладку" через sudo, например, которая позволит только проверить баланс, но не sendtoaddress.
hero member
Activity: 742
Merit: 500
BTCDig - mining pool
March 24, 2011, 08:25:32 AM
#15

вот такое примерно получил я в CLI. отинтерпретируйте мне пожалуйста это в 3 столбика? не забывайте, что порядок следования этих полей может измениться

Зато если я использую, скажем, библиотеку для, скажем, PHP, тот же самый запрос оказывается таблицей, которую удобно парсить Smiley .

Понятно что это не олимпиадная задача и распарсить это можно. Мне не понятно почему оно в CLI.

Пока, как я понял, мне чтобы это распарсить (этой штукой http://github.com/micha/jsawk ) придётся поставить целый javascript-интерпретатор, видимо, и худо-бедно изучить яваскрипт. Вот оно мне надо? И всё из-за того что кому-то нравится JSON выдать в stdout

Вот, собственно, решение:
Code:
$ cat test.txt |jsawk -n 'out(this.label+" "+this.amount+" "+this.confirmations)'
 251.61 11
user_id:152 842.2 12
user_id:21 1 1328
Собственно не понятно зачем парсить именно cli в консоли (ну кроме как для тестов), если нормально работает rpc.
А уж к rpc делать запросы можно откуда угодно и везде есть библиотеки.
sr. member
Activity: 350
Merit: 252
probiwon.com
October 02, 2010, 02:50:51 PM
#14
Hal всё, похоже.

Да, наверно у меня после xml аллергия на универсальные форматы для всего-всего во Вселенной... Smiley
full member
Activity: 185
Merit: 100
September 30, 2010, 12:48:39 PM
#13
Hal/udev так и используют до сих пор. С json всё несколько проще. Во-первых, он реально компактен. Точнее, это, пожалуй, наиболее компактный из небинарных форматов хранения данных, обладающий достаточной гибкостью (хотя кроме иерархии от него ничего и не требуется, даже аттрибуты XML можно сэмулировать, хотя лучше нормально продумать структуру). Во-вторых, его намного проще парсить, чем XML. Например, не нужно проверять соответствие и правильность порядка вложенностей, только количество открывающих-закрывающих скобок, а их порядок остаётся на совести выводящего, потому что все скобки равноправны. В XML, напротив, конструкция является синтаксически неверной, что влечёт дополнительные проверки, стек и утяжеление кода. В-третьих, это родной формат JavaScript для хранения структур данных, собственно, из названия оно и понятно. Ну и в-четвёртых, это всё же человекопонятный формат, т.е. его одинаково легко читает и модифицирует как человек, так и машина, что позволяет в разы быстрее находить ошибки и исправлять их людям, далёким от кода программы. Это, само собой, в сравнении с бинарными протоколами, которые без спецификации, дебаггера, tcpdump и поллитры не разобрать.

Но вот XML не одобряю, потому что в ней на самом деле много лишней писанины с точки зрения как человека, так и машины (открытие-закрытие тегов занимает половину объёма текста), а JSON очень неплох, потому как реально ничего лишнего. Кстати, питонские массивы имеют полностью односторонне-совместимый с JSON синтаксис (т.к. в питоне есть ещё tuples в круглых скобках, которые не определены в JSON). Наверно, ещё и поэтому я ему симпатизирую.
LZ
legendary
Activity: 1722
Merit: 1072
P2P Cryptocurrency
September 30, 2010, 08:40:59 AM
#12
Да, переводили, то еще извращение. У некоторых пользователей вполне так прижилось. Undecided
sr. member
Activity: 350
Merit: 252
probiwon.com
September 30, 2010, 05:49:23 AM
#11
Нет, XML куда сложнее. В нём есть именованные узлы, атрибуты и косвенные параметры, влияющие на разбор. А JSON — это просто список ключ-значение, зачастую, со вложенными такими же списками.

Не, я о моде - была такая же мода на xml, если помните

Под конец даже конфиги в /etc даже пытались на него переводить Smiley
full member
Activity: 185
Merit: 100
September 30, 2010, 05:23:24 AM
#10
Нет, XML куда сложнее. В нём есть именованные узлы, атрибуты и косвенные параметры, влияющие на разбор. А JSON — это просто список ключ-значение, зачастую, со вложенными такими же списками.
sr. member
Activity: 350
Merit: 252
probiwon.com
September 30, 2010, 04:48:05 AM
#9
А сейчас просто этот JSON в моде и все тут. Smiley

ага, эдакий XML v2.0
LZ
legendary
Activity: 1722
Merit: 1072
P2P Cryptocurrency
September 29, 2010, 10:10:32 PM
#8
А сейчас просто этот JSON в моде и все тут. Smiley
sr. member
Activity: 350
Merit: 252
probiwon.com
September 29, 2010, 12:29:58 PM
#7

вот такое примерно получил я в CLI. отинтерпретируйте мне пожалуйста это в 3 столбика? не забывайте, что порядок следования этих полей может измениться

Зато если я использую, скажем, библиотеку для, скажем, PHP, тот же самый запрос оказывается таблицей, которую удобно парсить Smiley .

Понятно что это не олимпиадная задача и распарсить это можно. Мне не понятно почему оно в CLI.

Пока, как я понял, мне чтобы это распарсить (этой штукой http://github.com/micha/jsawk ) придётся поставить целый javascript-интерпретатор, видимо, и худо-бедно изучить яваскрипт. Вот оно мне надо? И всё из-за того что кому-то нравится JSON выдать в stdout

Вот, собственно, решение:
Code:
$ cat test.txt |jsawk -n 'out(this.label+" "+this.amount+" "+this.confirmations)'
 251.61 11
user_id:152 842.2 12
user_id:21 1 1328
full member
Activity: 210
Merit: 100
September 29, 2010, 12:19:28 PM
#6
Потому что его легко интерпретировать в различных языках программирования. Во-первых, есть множество биндингов для различных ЯП. Во-вторых, результаты запросов могут представлять собой таблицу или массив, но при этом их можно использовать для любых других нужд.

ааа, легко?! Smiley

Code:
[
    {
        "label" : "",
        "amount" : 251.61000000,
        "confirmations" : 11
    },
    {
        "label" : "user_id:152",
        "amount" : 842.20000000,
        "confirmations" : 12
    },
    {
        "label" : "user_id:21",
        "amount" : 1.00000000,
        "confirmations" : 1328
    }
]

вот такое примерно получил я в CLI. отинтерпретируйте мне пожалуйста это в 3 столбика? не забывайте, что порядок следования этих полей может измениться

Зато если я использую, скажем, библиотеку для, скажем, PHP, тот же самый запрос оказывается таблицей, которую удобно парсить Smiley .
sr. member
Activity: 350
Merit: 252
probiwon.com
September 29, 2010, 11:34:53 AM
#5
Насчёт CLI -- было бы неплохо написать ncurses-интерфейс для bitcoin или переделать wxgtk-интерфейс для bitcoind.

не надо путать CLI и терминал

Вообще, Сатоши с точки зрения "маркетинга" может быть и прав был, когда сделал клиента "всё в одном" - и гуй, и демон и cli. Но вот писать теперь под биткоин интерфейсы не слишком удобно. лучше бы это была библиотека...
sr. member
Activity: 350
Merit: 252
probiwon.com
September 29, 2010, 11:33:06 AM
#4
Потому что его легко интерпретировать в различных языках программирования. Во-первых, есть множество биндингов для различных ЯП. Во-вторых, результаты запросов могут представлять собой таблицу или массив, но при этом их можно использовать для любых других нужд.

ааа, легко?! Smiley

Code:
[
    {
        "label" : "",
        "amount" : 251.61000000,
        "confirmations" : 11
    },
    {
        "label" : "user_id:152",
        "amount" : 842.20000000,
        "confirmations" : 12
    },
    {
        "label" : "user_id:21",
        "amount" : 1.00000000,
        "confirmations" : 1328
    }
]

вот такое примерно получил я в CLI. отинтерпретируйте мне пожалуйста это в 3 столбика? не забывайте, что порядок следования этих полей может измениться
member
Activity: 61
Merit: 10
Anyone who opposes FOSS shall be destroyed!
September 29, 2010, 11:11:55 AM
#3
Насчёт CLI -- было бы неплохо написать ncurses-интерфейс для bitcoin или переделать wxgtk-интерфейс для bitcoind.
member
Activity: 61
Merit: 10
Anyone who opposes FOSS shall be destroyed!
September 29, 2010, 11:10:18 AM
#2
Потому что его легко интерпретировать в различных языках программирования. Во-первых, есть множество биндингов для различных ЯП. Во-вторых, результаты запросов могут представлять собой таблицу или массив, но при этом их можно использовать для любых других нужд.
sr. member
Activity: 350
Merit: 252
probiwon.com
September 29, 2010, 11:01:00 AM
#1
Почему авторы так любят этот формат? Даже в CLI-интерфейсе всё отдаётся в нём

Благодаря этому я багу словил Sad
Jump to: