2015-10-09 3 views
0

с функцией:Есть ли регулярные выражения для web_reg_save_param() в границах LB и RB?

web_reg_save_param("questionId", "LB=secretKnowledges\":\\[\\{", "RB=\"", LAST); 

Я пытаюсь поймать значение параметра «QuestionID», который исходит из ответа сервера в качестве (файл в формате JSON) и выглядит так:

"salutation":{"firstNaAction me":"Sebastian","lastName":"Martens"},"userAccount":{"mail":"[email protected]","notificationLevel":"NEW_DEVICE","authenticationLevel":"ONE_FACTOR","gcid":"bb2e64a9-1b39-4692-9c52-4845eb15c4f7","secretKnowledges":[{"questionId":11301},{"questionId":11302}],"secretKnowledgeActivated":true,"status":"ACTIVATED"}} 

вместо Я получил следующую ошибку:

Action.c(23): Error -26377: No match found for the requested parameter "questionId". Either the specified boundaries were not found in the response or the matched text is longer than current max html parameter size of 8000 bytes. The total length of the response is 1506 bytes. You can use web_set_max_html_param_len to increase the max parameter size. [MsgId: MERR-26377]Action.c(23): Notify: Saving Parameter "questionId = ". 

что я сделал не так?

ответ

1

Не уверен, что я вас понимаю. Если вам нужны значения всех QuestionID параметров в ответ, попробуйте следующее:

web_reg_save_param("questionId", "LB={\"questionId\":", "RB=}", "Ord=All", LAST); 

Это создаст массив параметров questionId_1, questionId_2 и т.д. Кроме того, число параметров будут сохранены questionId_count параметр. Но если вам нужно только первое вхождение этого параметра, просто пропустите аргумент Ord = All.

Существует также специальный API экстракции для ответов JSON: web_reg_save_param_json. Вот пример для случая:

web_reg_save_param_json("ParamName=questionId", "QueryString=$..questionId", 
    "SelectAll=Yes", LAST); 

Кроме того, если вам нужно извлечение параметров RegEx основе, вы можете попробовать web_reg_save_param_regexp.

+0

@teserg: спасибо, что это сработало, но вы можете объяснить мне логику этого выражения: 'LB = {\" questionId \ ":", "RB =}', потому что вы устанавливаете обе границы под фигурные скобки, и «questionId» в ответе задается под квадратной скобкой. Я имею в виду, что вы не девальвировали его почему? – otmann

+0

'web_reg_save_param' - это не что иное, как функция разбора текста. Он просто пытается найти левую границу (LB) затем пытается найти правильную границу после позиции LB. Если оба они найдены, он извлекает любой текст между ними. – tserg42

+0

@otmann, если какой-либо из ответов разрешил ваш вопрос, пожалуйста, подумайте о принятии его, нажав галочку. не обязательно :). – tserg42

 Смежные вопросы

  • Нет связанных вопросов^_^