DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: 745300258
今日帖子: 4
在线用户: 9
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 cenunus (cenunus) ▲▲▲▲▲ -
注册会员
2019/3/29 10:21:25
标题:
哎,解析json弄得我头大。。。 浏览:887
加入我的收藏
楼主: 要解析的Json字符串是这样的:
[{"产品名称":"汤剂","剂量":15,"剂量单位":"天","是否代煎":"是","处方信息":"[{\"药品名称\":\"白花蛇舌草\",\"剂量\":1,\"剂量单位\":\"g\",\"是否代煎\":\"无\"}]"},{"产品名称":"中药材","剂量":12,"剂量单位":"天","是否代煎":"是","处方信息":"[{\"药品名称\":\"大黄\",\"剂量\":1,\"剂量单位\":\"g\",\"是否代煎\":\"无\"},{\"药品名称\":\"生地黄\",\"剂量\":1,\"剂量单位\":\"g\",\"是否代煎\":\"无\"}]"},{"产品名称":"净白面膜","剂量":10,"剂量单位":"盒","是否代煎":"否"}]

代码如下:
if not 新的订单信息.货物信息.IsEmpty then
    begin
      JA:=TJSONObject.ParseJSONValue(新的订单信息.货物信息) as TJSONArray;
      lv1.Items.Clear;
      for I := 0 to JA.Count-1 do
      begin
        Json:= TJSONObject.ParseJSONValue(Trim(JA.Items[I].ToString)) as TJSONObject;
        with lv1.Items.Add do
        begin
          产品名称:=StringReplace(Json.Values['产品名称'].ToString,'"','',[rfReplaceAll]);
          Caption:=产品名称;
          SubItems.Add(Json.Values['剂量'].ToString);
          SubItems.Add(StringReplace(Json.Values['剂量单位'].ToString,'"','',[rfReplaceAll]));
          SubItems.Add(StringReplace(Json.Values['是否代煎'].ToString,'"','',[rfReplaceAll]));

          if Json.TryGetValue('处方信息',JsonValue) then
          begin
          Data:=TStringGrid.Create(nil);
          TStringGrid(Data).Parent:=grp6;
          TStringGrid(Data).Align:=alClient;
          TStringGrid(Data).Options:=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goEditing];
          TStringGrid(Data).Font.Size:=10;
          TStringGrid(Data).ColCount:=4;
          TStringGrid(Data).FixedCols:=0;
          TStringGrid(Data).Visible:=True;
          TStringGrid(Data).OnDrawCell:=Mystrngrd1DrawCell;
          TStringGrid(Data).OnKeyDown:=Mystrngrd1KeyDown;
          TStringGrid(Data).OnKeyPress:=Mystrngrd1KeyPress;
          TStringGrid(Data).OnMouseDown:=Mystrngrd1MouseDown;
          TStringGrid(Data).OnSelectCell:=Mystrngrd1SelectCell;
          TStringGrid(Data).OnSetEditText:=Mystrngrd1SetEditText;
          lst1.Parent:=TStringGrid(Data);
          TStringGrid(Data).Cells[0,0]:='药品名称';
          TStringGrid(Data).ColWidths[0]:=225;
          TStringGrid(Data).Cells[1,0]:='剂量';
          TStringGrid(Data).ColWidths[1]:=100;
          TStringGrid(Data).Cells[2,0]:='剂量单位';
          TStringGrid(Data).ColWidths[2]:=120;
          TStringGrid(Data).Cells[3,0]:='煎药方式';
          TStringGrid(Data).ColWidths[3]:=120;

          tmp:=StringReplace(JsonValue.ToString,'\','',[rfReplaceAll]);
          //下一句代码失败
          tmpJA:=TJSONObject.ParseJSONValue(tmp) as TJSONArray;
          for J := 0 to tmpJA.Count-1 do
          begin
          tmpJson:= TJSONObject.ParseJSONValue(Trim(tmpJA.Items[J].ToString)) as TJSONObject;
          TStringGrid(Data).Cells[0,J]:=StringReplace(Json.Values['药品名称'].ToString,'"','',[rfReplaceAll]);
          TStringGrid(Data).Cells[1,J]:=StringReplace(Json.Values['剂量'].ToString,'"','',[rfReplaceAll]);
          TStringGrid(Data).Cells[2,J]:=StringReplace(Json.Values['剂量单位'].ToString,'"','',[rfReplaceAll]);
          TStringGrid(Data).Cells[3,J]:=StringReplace(Json.Values['煎药方式'].ToString,'"','',[rfReplaceAll]);
          end;
          end;
        end;
      end;
    end;
头疼头疼,希望大家指点一下,谢谢,另外想找个师傅,我周围只有我自己搞编程,连个讨论的人都没有,就算有也是弄web的,跟他们没有共同语言啊,我不会什么都问,只是希望有问题的话,能指点个方向就行,一个人自学太累了。
----------------------------------------------
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2019/3/29 10:29:26
1楼: 之前的帖子已经回过了,你这个
"处方信息":"[{\"药品名称\":\"白花蛇舌草\",\"剂量\":1,\"剂量单位\":\"g\",\"是否代煎\":\"无\"}]"
明显就有问题。
看你的意思就是想当成普通json来处理。那你用引号包裹以后就成字符串了,不但存储麻烦,而且转换也麻烦。
明显的脱裤子打屁按此在新窗口浏览图片
----------------------------------------------
--
作者:
男 cenunus (cenunus) ▲▲▲▲▲ -
注册会员
2019/3/29 10:41:13
2楼: 请教楼上应该怎么办?请高人指点
----------------------------------------------
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2019/3/29 10:46:53
3楼: 一楼给出的 json 没问题的,看 QDAC 的解析结果。。。
工欲善其事必先利其器
此帖子包含附件:
PNG 图像
大小:15.7K
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。
又不靠它 delphi 吃饭,怕甚?
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2019/3/29 10:52:10
4楼: 楼主给出的 json 解析结果,连斜杠都帮你自动去掉哦
此帖子包含附件:
PNG 图像
大小:52.8K
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。
又不靠它 delphi 吃饭,怕甚?
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2019/3/29 10:55:56
3楼: 一个json有什么花样么?楼上根本不懂我说的意思,也估计没彻底搞明白json


楼主看看下面的代码吧。delphi好久不写了。不知道对不对。反正差不多就这个意思。
const
  JSON_VALUE = '[' +
    '{"产品名称":"汤剂","剂量":15,"剂量单位":"天","是否代煎":"是","处方信息":[{"药品名称":"白花蛇舌草","剂量":1,"剂量单位":"g","是否代煎":"无"}]},' +
    '{"产品名称":"中药材","剂量":12,"剂量单位":"天","是否代煎":"是","处方信息":[{"药品名称":"大黄","剂量":1,"剂量单位":"g","是否代煎":"无"},' +
    '{"药品名称":"生地黄","剂量":1,"剂量单位":"g","是否代煎":"无"}]},{"产品名称":"净白面膜","剂量":10,"剂量单位":"盒","是否代煎":"否"}' +
    ']';
var
  pValue: TJSONValue;
  pArray: TJSONArray;
begin
  pValue := TJSONObject.ParseJSONValue(JSON_VALUE);
  if (nil = pValue) then
    Exit;

  pArray := pValue as TJSONArray;
  ...

  pValue.DisposeOf();
end;
----------------------------------------------
--
作者:
男 cenunus (cenunus) ▲▲▲▲▲ -
注册会员
2019/3/29 11:04:43
5楼: 我就是不知道怎么把处方信息里的数据取出来保存到stringgrid上去。。。我把处方信息中的字符串放到数组中时失败了,问题是这个语句和上一层的数组赋值语句是一样的,不明白为什么会失败。
----------------------------------------------
作者:
男 cenunus (cenunus) ▲▲▲▲▲ -
注册会员
2019/3/29 11:10:31
6楼: 净白面膜那里的反斜杠真的丢失了。。。我研究下
----------------------------------------------
作者:
男 cenunus (cenunus) ▲▲▲▲▲ -
注册会员
2019/3/29 11:12:21
7楼: 我在第二次赋值时已经统一去掉反斜杠了,应该没问题呀,真郁闷
tmp:=StringReplace(JsonValue.ToString,'\','',[rfReplaceAll]);
tmpJA:=TJSONObject.ParseJSONValue(tmp) as TJSONArray;
----------------------------------------------
作者:
男 cenunus (cenunus) ▲▲▲▲▲ -
注册会员
2019/3/29 11:15:09
8楼: 我试了一下,在第一次循环时,不论带不带反斜杠,赋值都会失败。。。
----------------------------------------------
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2019/3/29 11:19:13
7楼: 哎,都说了不要反斜杠。你带了双引号以后就成字符串了。
来回转换很好玩么?

以你的字符串为例:
[{"产品名称":"汤剂","剂量":15,"剂量单位":"天","是否代煎":"是","处方信息":[{"药品名称":"白花蛇舌草","剂量":1,"剂量单位":"g","是否代煎":"无"}]},{"产品名称":"中药材","剂量":12,"剂量单位":"天","是否代煎":"是","处方信息":[{"药品名称":"大黄","剂量":1,"剂量单位":"g","是否代煎":"无"},{"药品名称":"生地黄","剂量":1,"剂量单位":"g","是否代煎":"无"}]},{"产品名称":"净白面膜","剂量":10,"剂量单位":"盒","是否代煎":"否"}]

procedure TForm1.Button1Click(Sender: TObject);
const
  JSON_VALUE = '[' +
    '{"产品名称":"汤剂","剂量":15,"剂量单位":"天","是否代煎":"是","处方信息":[{"药品名称":"白花蛇舌草","剂量":1,"剂量单位":"g","是否代煎":"无"}]},' +
    '{"产品名称":"中药材","剂量":12,"剂量单位":"天","是否代煎":"是","处方信息":[{"药品名称":"大黄","剂量":1,"剂量单位":"g","是否代煎":"无"},' +
    '{"药品名称":"生地黄","剂量":1,"剂量单位":"g","是否代煎":"无"}]},{"产品名称":"净白面膜","剂量":10,"剂量单位":"盒","是否代煎":"否"}' +
    ']';
var
  pValue: TJSONValue;
  pArray, pSubItem: TJSONArray;
  i, j: Integer;
  szName: String;
begin
  pValue := TJSONObject.ParseJSONValue(JSON_VALUE);
  if (nil = pValue) then
    Exit;

  pArray := pValue as TJSONArray;
  for i := 0 to pArray.Count - 1 do
  begin
    if not pArray.Items[i].TryGetValue<TJSONArray>('处方信息', pSubItem) then
      Continue;

    for j := 0 to pSubItem.Count - 1 do
    begin
      if not pSubItem.Items[j].TryGetValue<String>('药品名称', szName) then
        Continue;

      ShowMessage(szName);
    end;
  end;

  pValue.DisposeOf();
end;
----------------------------------------------
--
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2019/3/29 11:30:57
9楼: 反正我不懂,但我偏要解析反斜杠的 JSON 也根本无需去掉反斜杠,估计楼上的不懂。。。
此帖子包含附件:
PNG 图像
大小:27.5K
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。
又不靠它 delphi 吃饭,怕甚?
作者:
男 xlonger (xlonger) ▲▲▲▲▲ -
普通会员
2019/3/29 11:39:25
10楼: 看 JSON的语法标准和 万一的博客。
----------------------------------------------
我打的是酱油,而不是别的什么油。
我灌的是口水,而不是别的什么水。
我聊的折腾不是那个不折腾的折腾。
我说的阿娇不是那个邓玉娇的阿娇。
3个代表,6个为什么,9个肠胃炎。
D性强的领导干部都不喜欢热比娅。
我特别要讲的是,屁民网黄色论坛是我经常上网必选的 网站之一
作者:
男 cenunus (cenunus) ▲▲▲▲▲ -
注册会员
2019/3/29 14:26:14
11楼: 找到原因了,处方信息后面的中括号前后都多了个双引号,难道这样会不兼容?我去掉前后的两个双引号就行了,郁闷!但是这样的代码太难看了
----------------------------------------------
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2019/3/29 15:40:48
12楼: 呵,不想解释了,你们爱咋咋滴吧。
----------------------------------------------
--
作者:
男 jackalan (nVicen) ★☆☆☆☆ -
盒子活跃会员
2019/3/29 15:54:38
13楼: 哎,楼上的已经和你解释老半天了,你多了引号,变成字符串了。
----------------------------------------------
简单做人,认真做事。
作者:
男 cenunus (cenunus) ▲▲▲▲▲ -
注册会员
2019/3/29 16:05:00
14楼: 嗯嗯,多谢各位指点,我再学习学习bahamut8348的代码,比我写的好多了,水平高就是不一样啊
----------------------------------------------
作者:
女 hecongzhen (令狐**) ▲▲▲▲▲ -
普通会员
2019/4/9 8:26:26
15楼: 用 superobject 解析 json 爽的很。。。。我的qq:602190388 我也是搞delphi 没事可以交流一下。。。。
----------------------------------------------
-
作者:
男 crystalmoon (crystalmoon) ★☆☆☆☆ -
盒子活跃会员
2019/4/9 9:11:49
16楼: 其实就是这个意思。。。。带\就是识别为string了。。。如果无法改变json格式(没有话语权),你也可以提取这个String后二次解析。
此帖子包含附件:
PNG 图像
大小:74.1K
----------------------------------------------
-
作者:
男 patebeng (patebeng) ▲△△△△ -
注册会员
2019/12/20 10:43:56
17楼: 嗯哼太有梗了离心泵
郭美美道歉视频污泥螺杆泵
多级泵
中国商人被勒死化工泵
四川石渠雪豹打架磁力泵
阿里市值超脸书氟塑料磁力泵
不锈钢磁力泵
萧敬腾当天气主播化工离心泵
云南高速事故多级离心泵
多级化工泵
塑料磁力泵
撒贝宁升级当爸耐腐蚀化工泵
操场埋尸案将开庭潜水泵
中国黑心贷款来分期
操场埋尸案将开庭液下泵
隔膜计量泵
胡歌剪寸头气动隔膜泵
研究生被骗311万计量泵
埋尸案嫌犯杜少平柱塞计量泵
松阳县山体塌方自吸泵
卫生转子泵
拼多多被曝卖假酒电动隔膜泵

张雨绮每月护肤费污泥螺杆泵上海机场回应接机
离心泵
立式离心泵
立式化工泵
田波院士逝世化工离心泵
数码宝贝20周年多级离心泵
2025年5G渗透率化工泵
兰心大剧院撤档多级泵
安娜卡里娜去世上海隔膜计量泵
樊振东许昕夺冠上海多级泵
格力股权转让获批上海离心泵
曝陶大宇将二婚上海磁力泵
地球大陆最深点上海气动隔膜泵
王仕鹏吐槽孙杨上海计量泵
滑雪场偶遇王俊凯上海化工离心泵
上海液下泵
陈乔恩回应脱粉上海螺杆泵
幼儿被遗弃垃圾站上海多级离心泵
75岁柳传志退休上海化工泵
劳荣枝被批捕全焊接球阀
埋地全焊接球阀
老人惨遭三车连撞直埋全焊接球阀


首任驸马墓被发现上海耐腐蚀化工泵
上海不锈钢磁力泵
上海氟塑料磁力泵
上海塑料磁力泵
韩国21岁兵长与32名同性发生性关系上海自吸离心泵
林更新否认新恋情上海柱塞计量泵
川航空姐坠楼成谜上海电动隔膜泵

《以家人之名》来袭,宋威龙领衔主演上海隔膜泵
暴风仅剩10余人上海潜水泵
徐峥斥责追我吧上海自吸泵
南非推新型HIV药自吸泵
梁静茹签字离婚潜水泵
柱塞计量泵
氟塑料磁力泵
塑料磁力泵
全球最大造船集团自吸离心泵
京东旗下网银被罚液下泵
柱塞计量泵
液下潜水泵
多级离心泵
耐腐蚀化工泵


不锈钢磁力泵
网曝青簪行换男主隔膜计量泵
磁力多级泵
管道离心泵
污泥螺杆泵输送泵
塑料液下泵
潜水泵报价
气动隔膜泵报价
深井潜水泵价格
井用潜水泵报价
旋片式真空泵
离心泵
污泥螺杆泵
多级离心泵
化工离心泵


江景房不能坐拥江景天然气焊接球阀
王思聪债主回应加高全焊接球阀
商场楼顶现空中马场锁闭式焊接球阀
王景春咏梅影帝影后过滤式全焊接球阀
白德彪去世法兰焊接球阀
13岁女孩烧国旗认罪固定焊接球阀
446家房企破产分体式焊接球阀
港星集体发声浮动焊接球阀
易烊千玺新歌
杨幂新戏全程黑脸焊接球阀
麦当劳成被执行人法兰球阀
佟丽娅帮朋友追星供暖焊接球阀
王源 影帝影后奖杯供热焊接球阀
姑娘生日当天立遗嘱燃气焊接球阀


嗯哼太有梗了上海离心泵
郭美美道歉视频上海污泥螺杆泵
上海多级泵
中国商人被勒死上海化工泵
四川石渠雪豹打架上海磁力泵
阿里市值超脸书上海氟塑料磁力泵
萧敬腾当天气主播上海化工离心泵
云南高速事故上海多级离心泵
上海塑料磁力泵
撒贝宁升级当爸上海耐腐蚀化工泵
拼多多被曝卖假酒上海电动隔膜泵
埋尸案嫌犯杜少平上海柱塞计量泵
中国黑心贷款来分期
上海隔膜计量泵
胡歌剪寸头上海气动隔膜泵
上海不锈钢磁力泵
上海自吸离心泵
研究生被骗311万上海计量泵
操场埋尸案将开庭上海液下泵
松阳县山体塌方上海自吸泵
上海卫生转子泵

血肉淋漓味足珍,一般苦痛怨难伸。设身处地扪心想,谁可将刀割自身
污泥螺杆泵
离心泵
磁力泵
化工离心泵
多级离心泵
·
----------------------------------------------
污泥螺杆泵
氟塑料磁力泵
化工离心泵
多级离心泵
离心泵
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行54.6875毫秒 RSS