获取json数据单个字段数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取json数据单个字段数据相关的知识,希望对你有一定的参考价值。

参考技术A 、、、

TYPES:BEGIN OF gty_data1,

index TYPE i,

pernrTYPE pa0001-pernr,

nameTYPE pa0002-nachn,

sexTYPE char2,

phoneTYPE usrid,

END OF gty_data1,

BEGIN OF gty_data2,

index TYPE i,

pernrTYPE pa0001-pernr,

phoneTYPE usrid,

END OF gty_data2,

BEGIN OF gty_data3,

index TYPE string,

pernrTYPE string,

nameTYPE string,

sexTYPE string,

phoneTYPE string,

END OF gty_data3.

DATA:gt_data1TYPE TABLE OF gty_data1,

gt_data2TYPE TABLE OF gty_data2,

gt_data3TYPE TABLE OF gty_data3,

gt_fcatTYPE lvc_t_fcat.

DATA:gs_data1TYPE gty_data1,

gs_data2TYPE gty_data2,

gs_data3TYPE gty_data3,

gs_fcatTYPE lvc_s_fcat.

DATA:serializerTYPE REF TO cl_trex_json_serializer,

deserializerTYPE REF TO cl_trex_json_deserializer,

ref_descrTYPE REF TO cl_abap_structdescr.

DATA:gv_jsonTYPE string.

FIELD-SYMBOLS:TYPE STANDARD TABLE.

START-OF-SELECTION.

PERFORM frm_sc_data."生产数据

PERFORM frm_sc_json."生产json数据

PERFORM frm_get_data."生成动态内表,

PERFORM frm_display_data."获取想要数据,显示数据

END-OF-SELECTION.

*&---------------------------------------------------------------------*

*&      Form  FRM_SC_DATA

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM frm_sc_data.

gs_data1-index = '2'.

gs_data1-pernr= '10000002'.

gs_data1-name= '男2号'.

gs_data1-sex= '男'.

gs_data1-phone= '12568956892'.

APPEND gs_data1TO gt_data1.

gs_data1-index = '3'.

gs_data1-pernr= '10000003'.

gs_data1-name= '女3号'.

gs_data1-sex= '女'.

gs_data1-phone= '12568956893'.

APPEND gs_data1TO gt_data1.

gs_data1-index = '4'.

gs_data1-pernr= '10000004'.

gs_data1-name= '女1号'.

gs_data1-sex= '女'.

gs_data1-phone= '12568956894'.

APPEND gs_data1TO gt_data1.

gs_data1-index = '5'.

gs_data1-pernr= '10000005'.

gs_data1-name= '男5号'.

gs_data1-sex= '男'.

gs_data1-phone= '12568956895'.

APPEND gs_data1TO gt_data1.

gs_data1-index = '6'.

gs_data1-pernr= '10000006'.

gs_data1-name= '男6号'.

gs_data1-sex= '男'.

gs_data1-phone= '12568956896'.

APPEND gs_data1TO gt_data1.

ENDFORM.

*&---------------------------------------------------------------------*

*&      Form  FRM_SC_DYN_TAB

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM frm_sc_json.

CREATE OBJECT serializer

EXPORTING

data = gt_data1[].

serializer->serialize( ).

gv_json= serializer->get_data( ).

WRITE: / gv_json.

ENDFORM.

*&---------------------------------------------------------------------*

*&      Form  FRM_GET_DATA

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM frm_get_data.

DATA:dyn_tableTYPE REF TO data.

DATA:lv_p1TYPE i,

lv_p2TYPE i,

lv_lTYPE i,

lv_textTYPE string,

lv_text1TYPE string,

lv_lenTYPE i,

lv_fieldTYPE string,

lv_indexTYPE i.

SEARCH gv_jsonFOR ''.

IF sy-subrc= 0.

lv_p1= sy-fdpos +1.

ENDIF.

SEARCH gv_jsonFOR ''.

IF sy-subrc= 0.

lv_p2= sy-fdpos.

ENDIF.

lv_l= lv_p2- lv_p1.

lv_text= gv_json+lv_p1(lv_l).

WRITE:/ lv_text.

DO.

CLEAR:lv_p1,lv_p2,lv_len.

lv_len= strlen( lv_text).

SEARCH lv_textFOR '"'.

IF sy-subrc= 0.

lv_p1= sy-fdpos.

ENDIF.

SEARCH lv_textFOR ','.

IF sy-subrc= 0.

lv_p2= sy-fdpos.

ENDIF.

IF lv_p2IS INITIAL.

lv_l= lv_len- lv_p1.

ELSE.

lv_l= lv_p2- lv_p1 +1.

ENDIF.

IF lv_p1IS INITIAL.

EXIT.

ENDIF.

lv_text1= lv_text+lv_p1(lv_l).

REPLACE lv_text1WITH '' INTO lv_text.

ENDDO.

WRITE:/ lv_text.

CONDENSE lv_textNO-GAPS.

DO.

lv_index= sy-index.

SPLIT lv_textAT ':' INTO lv_field lv_text.

IF sy-subrc= 0.

gs_fcat-fieldname= lv_field.

gs_fcat-col_pos= lv_index.

gs_fcat-inttype= 'g'.

*    gs_fcat-intlen    = 8.

*      gs_fcat-scrtext_l = '描述'."加上以后可直接用于ALV显示所需结构

APPEND gs_fcatTO gt_fcat.

ELSE.

EXIT.

ENDIF.

IF lv_textIS INITIAL."当字符串为空时,拆分字符sy-subrc= 0

EXIT.

ENDIF.

ENDDO.

CALL METHOD cl_alv_table_create=>create_dynamic_table

EXPORTING

it_fieldcatalog= gt_fcat

IMPORTING

ep_table= dyn_table.

ASSIGN dyn_table->*TO .

*  CREATE DATA dyn_line LIKE LINE OF <dyn_tab>."可生产结构

*    ASSIGN dyn_line->* TO <dyn_line>.

ENDFORM.

*&---------------------------------------------------------------------*

*&      Form  FRM_DISPLAY_DATA

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM frm_display_data.

CREATE OBJECT deserializer.

deserializer->deserialize(

EXPORTING json= gv_json

IMPORTING abap= ).

MOVE-CORRESPONDING TO gt_data2.

LOOP AT gt_data2INTO gs_data2.

WRITE:/ gs_data2-index,'-',gs_data2-pernr,'-',gs_data2-phone.

ENDLOOP.

ENDFORM.

、、、

从表中的 json 中获取单个项目

【中文标题】从表中的 json 中获取单个项目【英文标题】:Fetch individual item from json in a table 【发布时间】:2018-07-04 08:40:59 【问题描述】:

我有一个包含大量用户的 MySQL 表,每个用户都有一个 “详细信息”

用户数据示例:

["D11","E20","E70","E50","D50","G32"]

每个用户可能有更多或没有数据。

目前我通过一个简单的方法为每个用户获取这些数据

while ($row = pg_fetch_array($resultado)) 
    $details = $row["details"];

我想要的是能够从这个“数组”或“json”中选择 1、2、3 和 4 项,不确定它是什么或如何正确格式化它。

我希望能够将第一项保存在自定义变量中,例如

MainDetail = "D11";

我尝试使用 json 编码,序列化,但没有运气:/

【问题讨论】:

你试过$mainDetail = $row["details"][0]吗? 你的行details里面有序列化数据还是json数据? 请显示更多您的代码。我认为您使用 ajax 代码和一些 php 函数将 json 编码发送到 ajax。需要帮忙。 我发帖的方式,就是这样。在 varchar 类型的数据中。 保存了哪些数据? ["D11","E20","E70","E50","D50","G32"]->正是这个? 【参考方案1】:

实际上你已经在列中保存了字符串,你认为它要么是一个数组,要么是序列化/json数据。

请执行以下操作:-

while ($row = pg_fetch_array($resultado)) 
    echo $details = str_replace(array('[','"'),'',explode(",",$row["details"])[0]);

【讨论】:

我爱你,伙计!效果很好! @BWayne 很高兴为您提供帮助。但是尝试为此列创建单独的表,并根据user_id 将每个数据保存为单行。这称为规范化,这是正确的方法。或至少在此特定列中以序列化格式保存数据,而不是字符串格式。数据处理将变得容易

以上是关于获取json数据单个字段数据的主要内容,如果未能解决你的问题,请参考以下文章

如何通过使用 node.js 从实时 json 数据中提取特定字段来创建新的单个 json 对象

如何将数据从多个输入字段转换为单个 JSON 对象以进一步将其插入单个 mysql 字段

如何从 JSON 数组中的 JSON 对象中的单个值获取数据?

获取mysql中的多条记录并存入json数组中显示在HTML表格单单字段中

如何使用 LINQ 中的键对值从单个字段中获取重复数据?

MySQL:在 JSON 字段上连接表并获取 JSON 数据