2016-07-05 2 views
0

Я прочитал немного работы JSON по всему Интернету. как noob, ожидайте, что я не буду так хорош, как некоторые из вас при поиске примеров, потому что мне нужны знания, чтобы знать, что искать, чтобы получить знания. Словить 22. ;-)простая работа JSON: извлечение как ключа, так и значения

Я использую superobject, кажется, лучший способ пойти.

Мой вопрос: мне нужно разделить JSON на пары ключ/значение, до сих пор я мог получить только значение, если знаю, что это за ключ. Ключ (в моем приложении ключ [команда]) будет проверен на все возможные команды, а когда команда будет соответствовать, часть значения представляет собой список параметров, разделенных запятыми, в качестве аргументов для команды, которая будет инициирована боковая сторона. Затем сервер/клиент вызывает команду (процедуру/функцию) и передает [commaText] в качестве своих аргументов. (может быть, JSON политически корректный способ, который заменяет [commaText], и, конечно же, вы можете прокомментировать это, но до сих пор [commaText] является простым и легким способом для меня сделать это.

: Мне нужно извлечь как [значения ключа] и [значение Value] из пары JSON

это то, что я работаю до сих пор:.

function TWebSocketServer.GetValue(const AData: String; 
    Key: String): String; 
var 
    JSON: ISuperObject; 
    rowItem: ISuperObject; 
    ADataStringStream: TStringStream; 
begin 
    ADataStringStream := TStringStream.Create(AData); 
    JSON := TSuperObject.ParseStream(ADataStringStream, False); 

    rowItem := JSON[Key]; 
    if Assigned(rowItem) then 
    Result := rowItem.AsString 
    else Result := ''; 
end; 

это заставляет меня значение пары если я уже знаю, что такое ключ пары.

Реставрация: необходимо извлечь b oth key/value как отдельные строки из данных JSON (обычно/в основном, у меня есть в наличии более одной пары ключей, одна команда/одна передача)

Больше фона: у меня есть SQLDatabase/App-Server/Выполнение многих клиентов. (App-Server I/O < -> SQL, вычисляет, а затем выводит на клиентов, клиенты получают вызов ввода/функции с приложения-сервера, обновляют его значения, а затем пользователь может вызывать функцию на App-сервере через с помощью клиента для вызова этой функции - с использованием веб-интерфейсов для связи. Оба приложения-сервера и клиенты могут вызывать функции и процедуры в api, но это будет одна команда за раз от клиент-сервера или сервера-клиента.

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

Пожалуйста, любые предложения будут оценены

PS. Delphi 10,1 Berlin, Windows 10 x64

+1

Примеры для библиотеки показывают вам, как –

+0

какая библиотека @DavidHeffernan? http://docwiki.embarcadero.com/RADStudio/Seattle/en/JSON только строит пары ключ/значение, он их не извлекает. – chillum

+1

Вы используете суперобъект. Прочтите его документацию. И FWIW, которую вы упомянули в библиотеке Emba, поддерживает перечисление объекта JSON –

ответ

3

Спасибо Дэвид, все, что мне нужно :-)

Этот простой пример показывает, что именно я хотел!

procedure TfrmWebSocketServer.Button3Click(Sender: TObject); 
var 
    item: TSuperAvlEntry; 
    obj: ISuperObject; 
begin 
    obj := SO('{"Command": "Parameters, Parameters"}'); 
    for item in obj.AsObject do 
    begin 
    vcl.Dialogs.ShowMessage(item.Name); //outputs "Command" 
    vcl.Dialogs.ShowMessage(item.Value.AsString); //outputs "Parameters, Parameters" 
    end; 
end; 
Смежные вопросы