1. <span style="font-size:14px;">一直想找如何解析JSON数据的说,今天终于找到有人发帖子了。之前有人说用superobject,Tlkjson,delphi json library,delphi  web unit等等。其实我是想找比较简单的解析方式。解析简单的json。下面是转载的坦然的源码。
  2. </span>
  1. unit Unit1;
  2. interface
  3. uses
  4. Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  5. Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,DBXJSON;
  6. type
  7. TForm1 = class(TForm)
  8. Button1: TButton;
  9. procedure Button1Click(Sender: TObject);
  10. private
  11. { Private declarations }
  12. public
  13. { Public declarations }
  14. end;
  15. var
  16. Form1: TForm1;
  17. implementation
  18. {$R *.dfm}
  19. const
  20. GJSONString =
  21. '{' +
  22. '    "name": {'+
  23. '        "A JSON Object": {' +
  24. '          "id": "1"' +
  25. '        },' +
  26. '        "Another JSON Object": {' +
  27. '          "id": "2"' +
  28. '        }' +
  29. '    },' +
  30. '    "totalobjects": "2"' +
  31. '}';
  32. procedure TForm1.Button1Click(Sender: TObject);
  33. var
  34. LJSONObject: TJSONObject;
  35. Value: TJSONValue;
  36. begin
  37. LJSONObject := nil;
  38. try
  39. LJSONObject := TJsonObject.Create;
  40. Value := TJSONValue.Create;
  41. { convert String to JSON }
  42. LJSONObject.Parse(BytesOf(GJSONString), 0);
  43. Value :=LJSONObject.GetValue('name');
  44. ShowMessage(Value.ToString);
  45. finally
  46. LJSONObject.Free;
  47. end;
  48. end;
  49. end.

灰常好,在此谢谢博主。

但是这样处理中文的时候会出现乱码现象。我对代码稍微修改了一下:

  1. var
  2. jo:tjsonobject;
  3. jv:tjsonvalue;
  4. jsonstr:string;//要转换的json字符串
  5. begin
  6. jo:=nil;
  7. jsonstr:='{"name":"流川枫","interest":"与樱木吵架"};
  8. try
  9. jo:=tjsonobject.create;
  10. jo:=tjsonobject.parsejsonvalue(tencoding.utf8.getbytes(jsonstr),0) as tjsonobject;
  11. jv:=jo.get('interest').jsonvalue;
  12. showmessage(jv.value);
  13. finally
  14. jo.Free;
  15. end;
  16. end;

终于能转换成中文了。
下面是关于jsonobject的解析(举一反三):

  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3. jsonstr: string;
  4. jvalue: tjsonvalue;
  5. jobj: tjsonobject;
  6. jpair: tjsonpair;
  7. jarray: tjsonarray;
  8. begin
  9. jsonstr:='{'name':'tom','password':'tomcat','interests':['mouse','meat']}';
  10. jvalue := tjsonobject.ParseJSONValue
  11. (tencoding.UTF8.GetBytes(jsonstr), 0);
  12. try
  13. jobj := jvalue as tjsonobject;
  14. jpair := jobj.Get(2); // get the third json pair
  15. jarray := jpair.JsonValue as tjsonarray; // pair value is an array ['mouse','meat']
  16. strresult := jarray.Get(0).value; // first element of array['mouse','meat']
  17. showmessage(strresult);//it is mouse
  18. finally
  19. jvalue.Free;
  20. end;
  21. end;
 
http://blog.csdn.net/syndicater/article/details/17371111

如何解析DELPHI XE5服务器返回的JSON数据(翻译)及中文乱码的更多相关文章

  1. JS前端取得并解析后台服务器返回的JSON数据的方法

    摘要:主要介绍:使用eval函数解析JSON数据:$.getJSON()方法获得服务器返回的JSON数据 JavaScript eval() 函数 eval(string) 函数可计算某个字符串,并执 ...

  2. 解决springboot序列化 json数据到前端中文乱码问题

    前言 关于springboot乱码的问题,之前有文章已经介绍过了,这一篇算是作为补充,重点解决对象在序列化过程中出现的中文乱码的问题,以及后台报500的错误. 问题描述 spring Boot 中文返 ...

  3. ajaxFileUpload上传文件成功后却无法解析服务器返回的json数据

    可能是应该返回内容带了标签,过滤下 var index=data.indexOf("<"); if (index!=-1){ data=data.substring(0,in ...

  4. 服务器返回的json数据中含有null的处理方法

    个人博客:http://guohuaden.com/2017/03/06/json-dataNull/因为有遇到过类似情况,所以就想到了一些解决方法,并且实践了一下,这里简单的做个记录. 注:有看到不 ...

  5. 【原创】@ResponseBody返回json数据时出现中文乱码

    ι 版权声明:本文为博主原创文章,未经博主允许不得转载. 原因: Spring中解析字符串的转换器默认编码格式是ISO-8859-1 public class StringHttpMessageCon ...

  6. javascript解析从服务器返回的json格式数据

    在javascript中我们可以将服务器返回的json格式数据转换成json格式进行使用,如下: 1.服务器返回的json格式数据: 通过response.responseText获得: " ...

  7. 【转】Jquery ajax方法解析返回的json数据

    转自http://blog.csdn.net/haiqiao_2010/article/details/12653555 最近在用jQuery的ajax方法传递接收json数据时发现一个问题,那就是返 ...

  8. php怎么解析utf-8带BOM编码的json数据,php解析json数据返回NULL

    今天遇到一个问题,json_decode解析json数据返回null,试了各种方法都不行,最后发现,原来是json文件编码的问题. 当json_decode解析utf-8带BOM格式的json数据时, ...

  9. [Swift通天遁地]四、网络和线程-(11)将服务器返回的JSON映射为实例对象

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

随机推荐

  1. 【NOIP2012提高组】开车旅行 倍增

    题目分析 朴素的做法就是预处理下一个目的地,然后跑模拟,超时. 本题最重要的考点是倍增优化.设$fa[i][j]$表示a从i出发行驶$2^j$“次”后行驶的路程,$fb[i][j]$表示从i出发行驶$ ...

  2. zookeeper 客户端操作

    代码 /** * 创建zk客户端 * 实现循环监听的两个必要条件:1.程序不能结束2.递归调用监听器 * @author tele * */ public class Demo { ; //多个节点用 ...

  3. C#7模范和实践

    C# 7 中的模范和实践   原文地址:https://www.infoq.com/articles/Patterns-Practices-CSharp-7 关键点 遵循 .NET Framework ...

  4. 属性动画Property Animation

    ViewPropertyAnimation 使用方式:View.animate() 后跟 translationX() 等方法,动画会自动执行. 注意translationX实现是调用对应的set方法 ...

  5. Java获取URL对应的资源

    Java获取URL对应的资源   认识IP.认识URL是进行网络编程的第一步.java.net.URL提供了丰富的URL构建方式,并可以通过java.net.URL来获取资源.   一.认识URL   ...

  6. this解析

    定时器中的this function Aaa() { var _this = this; //解决关键 this.a = 12; //但凡被定时器调的函数,this必然是window,所以,show里 ...

  7. java学习笔记(8)——多线程

    进程:是一个程序在其自身的地址空间的一次执行活动. 线程:(区别于进程)线程没有独立的存储空间. 几个概念:时间片 线程  进程   能不能够用多进程代替多线程呢? 两个进程切换时要交换内存空间,而多 ...

  8. XML DTD和XML Schema

    CSDN原文.讲的很清楚.

  9. Silverlight自定义数据绑定控件应该如何处理IEditableObject和IEditableCollectionView对象

    原文:Silverlight自定义数据绑定控件应该如何处理IEditableObject和IEditableCollectionView对象 原创文章,如需转载,请注明出处. 最近在一直研究Silve ...

  10. Java Swing界面编程(29)---JCheckBox事件处理

    JCheckBox和JRadioButton的事件处理监听接口是一样的,都是使用ItemListener接口. package com.beyole.util; import java.awt.Con ...