繁体   English   中英

将 json 值存储在变量中

[英]To store json values in a variable

我有一个 postgres 函数,输入参数是 json。 我需要从这个 JSON 中提取值并将其插入到不同的表中。

管理员将从前端创建表单、部分、步骤、问题,这些数据将作为 JSON 获取,我需要相应地将数据插入表中。 这里每个表格可以有 n 个部分,每个部分可以有 n 个步骤,每个步骤有 n 个这样的问题。 我的想法是将 JSON 中的值提取到变量中,并使用此变量插入表中。 我对 postgres 很陌生,所以不知道这是否是个好主意。

请找到我将获得的 JSOn

{  
   "functionId":"",
   "subFunctionId":"",
   "groupId":"Audit",
   "formId":"",
   "formName":"sample form",
   "submittedBy":"2000269",
   "createdDate":"2015-08-06",
   "updatedBy":"",
   "updatedDate":"",
   "comments":"",
   "formStatusId":"",
   "formStatus":"",
   "formLanguage":"",
   "isFormConfigured":"",
   "formChange":"Yes",
   "sectionLevelChange":"Yes",
   "isActive":"",
   "formVersionNo":"",
   "formFooterDetails":"",
   "formHeaderDetails":"",
   "images":[  
      {  
         "imageId":"",
         "imageTempId":"",
         "imageTempUrl":"",
         "imageName":"",
         "imageUrl":"",
         "isDeleted":"",
         "imagesDesc":""
      }
   ],
   "imagesDescLevel":"",
   "sectionElements":[  
      {  
         "sectionElement":[  
            {  
               "sectionId":"",
               "sectionTempId":"sectionId+DDMMHHSSSS",
               "sectionName":"section1",
               "sectionChange":"Yes",
               "stepLevelChange":"Yes",
               "sectionLabel":"",
               "sectionOrder":"",
               "outOfScopeSection":"false",
               "punchListSection":"false",
               "images":[  
                  {  
                     "imageId":"",
                     "imageTempId":"",
                     "imageTempUrl":"",
                     "imageName":"",
                     "imageUrl":"",
                     "isDeleted":"",
                     "imagesDesc":""
                  }
               ],
               "imagesDescLevel":"",
               "isDeleted":"",
               "stepElements":[  
                  {  
                     "stepElement":[  
                        {  
                           "stepId":"",
                           "stepTempId":"stepId+DDMMHHSSSS",
                           "stepName":"step1",
                           "stepLabel":"",
                           "stepOrder":"",
                           "stepChange":"Yes",
                           "questionLevelChange":"Yes",
                           "images":[  
                              {  
                                 "imageId":"",
                                 "imageTempId":"",
                                 "imageTempUrl":"",
                                 "imageName":"",
                                 "imageUrl":"",
                                 "isDeleted":"",
                                 "imagesDesc":""
                              }
                           ],
                           "imagesDescLevel":"",
                           "isDeleted":"",
                           "questionAnswerElements":[  
                              {  
                                 "questionAnswerElement":[  
                                    {  
                                       "questionId":"",
                                       "questionClientUid":"",
                                       "questionDescription":"",
                                       "questionAccessibility":"",
                                       "isPunchListQuestion":"",
                                       "questionChange":"Yes",
                                       "questionOrder":"",
                                       "isDeleted":"",
                                       "images":[  
                                          {  
                                             "imageId":"",
                                             "imageTempId":"",
                                             "imageTempUrl":"",
                                             "imageName":"",
                                             "imageUrl":"",
                                             "isDeleted":"",
                                             "imagesDesc":""
                                          }
                                       ],
                                       "imagesDescLevel":"",
                                       "answerId":"",
                                       "answerClientUid":"",
                                       "elements":[  
                                          {  
                                             "element":[  
                                                {  
                                                   "elementId":"",
                                                   "elementMapId":"",
                                                   "clientUid":"",
                                                   "clientClass":"",
                                                   "imageTempId":"",
                                                   "imageTempUrl":"",
                                                   "elementType":"Question",
                                                   "elementOrder":"",
                                                   "elementArributuesProp":[  
                                                      {  
                                                         "attributeId":"",
                                                         "attributeName":"",
                                                         "defaultValue":""
                                                      }
                                                   ],
                                                   "elementArributuesVal":[  
                                                      {  
                                                         "value1":"item1"
                                                      }
                                                   ],
                                                   "rule":[  
                                                      {  
                                                         "ruleId":"1",
                                                         "ruleName":"Mandatory",
                                                         "formula":"i>a",
                                                         "formulaData":"i>50",
                                                         "isDeleted":"",
                                                         "addAction":[  
                                                            {  
                                                               "actionId":"1",
                                                               "actionDescription":"",
                                                               "actionTag":"",
                                                               "actionOutput":"",
                                                               "actionOutputValue":"",
                                                               "numberOfFields":"",
                                                               "isDeleted":""
                                                            }
                                                         ]
                                                      }
                                                   ]
                                                }
                                             ]
                                          }
                                       ]
                                    }
                                 ]
                              }
                           ]
                        }
                     ]
                  }
               ]
            }
         ]
      }
   ]
}

如何从 JSON 中将值提取到变量中。 任何帮助都非常感谢

谢谢

我可以通过以下查询获取详细信息

select 
     line_item4->'questionDescription',line_item6->'elementMapId',line_item7->'attributeId',line_item8->'value1',line_item9->'ruleId',line_item10->'actionId'
     from tbl d,
     json_array_elements(d.j->'sectionElements') l,
     json_array_elements(l->'sectionElement') AS line_item,
     json_array_elements(line_item->'stepElements') AS line_item1,
     json_array_elements(line_item1->'stepElement') AS line_item2,
     json_array_elements(line_item2->'questionAnswerElements') AS line_item3,
     json_array_elements(line_item3->'questionAnswerElement') AS line_item4,
     json_array_elements(line_item4->'elements') AS line_item5,
     json_array_elements(line_item5->'element') AS line_item6,
     json_array_elements(line_item6->'elementArributuesProp') AS line_item7,
     json_array_elements(line_item6->'elementArributuesVal') AS line_item8,
     json_array_elements(line_item6->'rule') AS line_item9,
     json_array_elements(line_item9->'addAction') AS line_item10

谢谢

您可以使用 Postgres 函数来获取值,但您应该知道如何使用它们 - 例如,下面我根据表的特定 id 从上下文列中获取了值 -

    select id,context,(SELECT *
FROM json_array_elements((tr.context#>'{path}')::json) as obj
WHERE  obj->>'type' = 'Hospital' )->>'displayName' as each_attribute from task_results tr where tr.id = '11e99de6-f2c6-66e8-b45f-1ff041905861'

上下文列有这个数据 -

{
"use": "",
"path": [
    {
        "id": "11e837f8-42f2-1c62-8cb2-f703eb1e89ad",
        "type": "Root",
        "displayName": "Virtual Hospital"
    },
    {
        "id": "11e837fb-7c5e-57e2-91ac-ab2e1b35a7e9",
        "type": "Hospital",
        "displayName": "Test hospital"
    },
    {
        "id": "11e8d3c4-e68a-0868-b88f-07054484efea",
        "type": "Room",
        "displayName": "vivek's room"
    }
],
"compoundId": "05a34eccd38956e6b7dc1ba85e5c04c29ef3b9cd5f15a73e448222780d4671c86"

}

所以从上面的 json 我只需要存储在 displayName 中的医院名称,“类型”应该只是医院。 在上述帮助下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM