для извлечения каждого значения свойства json из поиска: извлечено

#json #marklogic

#json #marklogic

Вопрос:

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

 let $doc := 
    for $sResult in ($result/search:result)
        let $uri := fn:data($sResult/@uri)
        let $docElements := $sResult/search:extracted 
        return xdmp:from-json-string($docElements/text())
return $doc
  

Вывод в текстовом формате:

 [{"title":"xxxxxxxxx"}, {"species":"Animals"}]
[{"title":"yyyyyyyyy"}, {"species":"Animals"}]
  

Итак, я хочу получить что-то вроде $docElements/title/text() , чтобы я получал значение свойства title json для выполнения некоторых строковых операций, а затем помещал их обратно в объект json для получения желаемого результата.
Итак, не уверен, как сделать то же самое.

Ответ №1:

Чтобы изменить содержимое документов, рассмотрите возможность использования search:resolve-nodes() вместо search:search() .

Если требуется получить и изменить содержимое JSON перед возвратом клиенту, один из подходов заключается в

  1. преобразуйте каждый узел JSON в изменяемую карту
  2. перейдите и измените карту с помощью map:get() и map:put()
  3. преобразуйте измененную карту обратно в узел JSON

Набросок этого подхода:

 let $modifiedDocs :=
    for $inputDoc in search:resolve-nodes(...query..)
    let $tempMap := xdmp:from-json($inputDoc)
    let $_ := ... navigate and modify the map ...
    return xdmp:to-json($tempMap)
  

Для полноты картины, если целью было вместо этого изменить сохраненные документы JSON, итерация может напоминать следующий эскиз:

  for $oldDoc in search:resolve-nodes(...query..)
 let $tempMap := xdmp:from-json($inputDoc)
 let $_ := ... navigate and modify the map ...
 let $newDoc := xdmp:to-json($tempMap)
 return xdmp:node-replace($oldDoc, $newDoc)
  

Надеюсь, это поможет,

Комментарии:

1. Спасибо за ответ, но мне нужно извлечь значения каждого свойства json, чтобы выделить текст поиска. Кроме того, мне не нужно ничего менять в документе, строковые изменения, которые я должен выполнить над текстом свойства json и отправить на уровень пользовательского интерфейса, никаких изменений в документах БД.

2. Пожалуйста, предложите.