如何解析DELPHI XE5服务器返回的JSON数据(翻译)及中文乱码
- <span style="font-size:14px;">一直想找如何解析JSON数据的说,今天终于找到有人发帖子了。之前有人说用superobject,Tlkjson,delphi json library,delphi web unit等等。其实我是想找比较简单的解析方式。解析简单的json。下面是转载的坦然的源码。
- </span>
- unit Unit1;
- interface
- uses
- Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
- Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,DBXJSON;
- type
- TForm1 = class(TForm)
- Button1: TButton;
- procedure Button1Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.dfm}
- const
- GJSONString =
- '{' +
- ' "name": {'+
- ' "A JSON Object": {' +
- ' "id": "1"' +
- ' },' +
- ' "Another JSON Object": {' +
- ' "id": "2"' +
- ' }' +
- ' },' +
- ' "totalobjects": "2"' +
- '}';
- procedure TForm1.Button1Click(Sender: TObject);
- var
- LJSONObject: TJSONObject;
- Value: TJSONValue;
- begin
- LJSONObject := nil;
- try
- LJSONObject := TJsonObject.Create;
- Value := TJSONValue.Create;
- { convert String to JSON }
- LJSONObject.Parse(BytesOf(GJSONString), 0);
- Value :=LJSONObject.GetValue('name');
- ShowMessage(Value.ToString);
- finally
- LJSONObject.Free;
- end;
- end;
- end.
灰常好,在此谢谢博主。
但是这样处理中文的时候会出现乱码现象。我对代码稍微修改了一下:
- var
- jo:tjsonobject;
- jv:tjsonvalue;
- jsonstr:string;//要转换的json字符串
- begin
- jo:=nil;
- jsonstr:='{"name":"流川枫","interest":"与樱木吵架"};
- try
- jo:=tjsonobject.create;
- jo:=tjsonobject.parsejsonvalue(tencoding.utf8.getbytes(jsonstr),0) as tjsonobject;
- jv:=jo.get('interest').jsonvalue;
- showmessage(jv.value);
- finally
- jo.Free;
- end;
- end;
终于能转换成中文了。
下面是关于jsonobject的解析(举一反三):
- procedure TForm1.Button1Click(Sender: TObject);
- var
- jsonstr: string;
- jvalue: tjsonvalue;
- jobj: tjsonobject;
- jpair: tjsonpair;
- jarray: tjsonarray;
- begin
- jsonstr:='{'name':'tom','password':'tomcat','interests':['mouse','meat']}';
- jvalue := tjsonobject.ParseJSONValue
- (tencoding.UTF8.GetBytes(jsonstr), 0);
- try
- jobj := jvalue as tjsonobject;
- jpair := jobj.Get(2); // get the third json pair
- jarray := jpair.JsonValue as tjsonarray; // pair value is an array ['mouse','meat']
- strresult := jarray.Get(0).value; // first element of array['mouse','meat']
- showmessage(strresult);//it is mouse
- finally
- jvalue.Free;
- end;
- end;
如何解析DELPHI XE5服务器返回的JSON数据(翻译)及中文乱码的更多相关文章
- JS前端取得并解析后台服务器返回的JSON数据的方法
摘要:主要介绍:使用eval函数解析JSON数据:$.getJSON()方法获得服务器返回的JSON数据 JavaScript eval() 函数 eval(string) 函数可计算某个字符串,并执 ...
- 解决springboot序列化 json数据到前端中文乱码问题
前言 关于springboot乱码的问题,之前有文章已经介绍过了,这一篇算是作为补充,重点解决对象在序列化过程中出现的中文乱码的问题,以及后台报500的错误. 问题描述 spring Boot 中文返 ...
- ajaxFileUpload上传文件成功后却无法解析服务器返回的json数据
可能是应该返回内容带了标签,过滤下 var index=data.indexOf("<"); if (index!=-1){ data=data.substring(0,in ...
- 服务器返回的json数据中含有null的处理方法
个人博客:http://guohuaden.com/2017/03/06/json-dataNull/因为有遇到过类似情况,所以就想到了一些解决方法,并且实践了一下,这里简单的做个记录. 注:有看到不 ...
- 【原创】@ResponseBody返回json数据时出现中文乱码
ι 版权声明:本文为博主原创文章,未经博主允许不得转载. 原因: Spring中解析字符串的转换器默认编码格式是ISO-8859-1 public class StringHttpMessageCon ...
- javascript解析从服务器返回的json格式数据
在javascript中我们可以将服务器返回的json格式数据转换成json格式进行使用,如下: 1.服务器返回的json格式数据: 通过response.responseText获得: " ...
- 【转】Jquery ajax方法解析返回的json数据
转自http://blog.csdn.net/haiqiao_2010/article/details/12653555 最近在用jQuery的ajax方法传递接收json数据时发现一个问题,那就是返 ...
- php怎么解析utf-8带BOM编码的json数据,php解析json数据返回NULL
今天遇到一个问题,json_decode解析json数据返回null,试了各种方法都不行,最后发现,原来是json文件编码的问题. 当json_decode解析utf-8带BOM格式的json数据时, ...
- [Swift通天遁地]四、网络和线程-(11)将服务器返回的JSON映射为实例对象
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
随机推荐
- 【水水水】【洛谷 U4566】赛车比赛
题目背景 kkk在赛车~ 题目描述 现在有N辆赛车行驶在一条直线跑道(你可以认为跑道无限长)上.它们各自以某种速度匀速前进,如果有两辆车A车和B车,A车在B车的后面,且A车的速度大于B车的速度,那么经 ...
- HDU 3605Escape(缩点+网络流之最大流)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3605 本来打算昨天写两道题的,结果这个题卡住了,最后才发现是最后的推断条件出错了,推断满流的条件应该是 ...
- Android SDK location should not contain whitespace, as this cause problems with NDK tools
解决方案一: The easiest solution is to move the SDK somewhere else, where there is no space or other whit ...
- E: Could not get lock /var/lib/dpkg/lock(无法获得锁)
出现这个问题可能是有另外一个程序正在运行,导致资源被锁不可用.而导致资源被锁的原因可能是上次运行安装或更新时没有正常完成,进而出现此状况,解决的办法其实很简单.有以下两种解决办法: 1. 强制解锁 执 ...
- Scala & IntelliJ IDEA环境搭建升级版:在JAVA中调用Scala的helloworld
--------------------- 前言 --------------------- 项目关系,希望用Spark GraphX做数据分析及图像展示,但前提是得会spark:spark是基于sc ...
- Focusable 属性和IsTabStop 属性之间的关系
原文:Focusable 属性和IsTabStop 属性之间的关系 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Libby1984/article ...
- DDD实战2 创建领域基础类库项目
1.创建领域基础类库项目 取名DDD.DomainBase 放置于基础设施层 2.新建IEntity接口,内部创建2个属性 code和Id用于限定 public interface IEntity { ...
- WPF中的可视化对象(Visual)
原文:WPF中的可视化对象(Visual) 这是MSDN对Visual的解释:Visual class:Provides rendering support in WPF, which include ...
- Delphi内存管理(Integer、Boolean、Record、枚举等都是在作用域内编译器自动申请内存,出了作用域自动释放;另外,字符串、Variant、动态数组、接口也是由Delphi自动管理)
一.什么是堆.栈? 程序需要的内存空间分为 heap(堆) 和 stack(栈),heap 是自由存储区, stack 是自动存储区,使用 heap 需要手动申请.手动释放, stack 是自动申请. ...
- 线程池;java的线程池的实现原理;适用于频繁互动(如电商网站)
线程池是一种多线程处理形式,处理过程中将任务加入到队列,然后在创建线程后自己主动启动这些任务.线程池线程都是后台线程.每一个线程都使用默认的堆栈大小,以默认的优先级执行.并处于多线程单元中. 假设某个 ...