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

[plain] view plain copy

print?

  1. <span style="font-size:14px;">一直想找如何解析JSON数据的说,今天终于找到有人发帖子了。之前有人说用superobject,Tlkjson,delphi json library,delphi  web unit等等。其实我是想找比较简单的解析方式。解析简单的json。下面是转载的坦然的源码。
  2. </span>

[delphi] view plain copy

print?

  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.

灰常好,在此谢谢博主。

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

[delphi] view plain copy

print?

  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的解析(举一反三):

[delphi] view plain copy

print?

  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

时间: 2024-12-20 09:55:59

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

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

ajaxFileUpload是一款很好用的文件上传插件,网上也有很多关于它的版本,但在上传文件成功后想返回json数据给前台时,却会出现无法解析json数据的情况. 仔细调试发现其实在向服务器提交数据后,是进入了success回调函数的,只是没有解析到json数据.那就说明服务器做出了响应的,进入了success方法的,唯一的问题就是前台接受的数据不是json格式的. 使用console.log输出data发现并不是纯粹的json数据,其中头部多了<pre style="word-wrap

微信相关 -- 可以通过调用下面的方法 请求对应的url 获取微信服务器返回的json数据

//requestUrl 请求的地址 //requestMethod 请求的方法  get post //outputStr 需要上传到微信服务器上的数据 json 格式 public static String httpRequest(String requestUrl, String requestMethod, String outputStr) { String jsonStr = ""; StringBuffer buffer = new StringBuffer(); tr

在AFN中使用NSXMLParser解析服务器返回的XML数据

服务器返回的XML格式: 因为苹果没有提供直接获取xml开始标签和结束标签中间的字符串,虽然提供了 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string这个方法获取中间的字符串,但是这个字符串包含了空格和回车,所以要在这个方法中进行过滤. 源代码如下: 8 9 #import "RecommendController.h" 11 #import "SPHTTPRequestTool.h&

Jquery JavaScript解析Ajax返回的json数据(转)

最近在用jquery的ajax方法传递接收json数据时发现一个问题,那就是返回的data数据,有时候可以直接作为json数据使用,可有时候又不行. 经过网友指出,这个问题已经有了比较明确的结论,那就是jquery ajax方法的complete方法是不会处理dataType的,所以如果你是在complete里面试图直接用json数据是不可行的,必须先通过eval. $.ajax方法如下: Java代码 $.ajax({ type: “POST”, url: ctxRoot+’FolderAct

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

本文将演示使用第三方类库中,将服务器返回的JSON映射为实例对象. 首先确保在项目中已经安装了所需的第三方库. 点击[Podfile],查看安装配置文件. 1 platform :ios, ’12.0’ 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'Alamofire', '~> 4.0' 7 pod 'AlamofireObjectMapper

关于eval()函数处理后台返回的json数据

对于服务器返回的JSON字符串,如果jquery异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,方式不是太麻烦,就是将该字符串放于eval()中执行一次.这种方式也适合以普通javascipt方式获取json对象,以下举例说明: var dataObj=eval("("+data+")");//转换为json对象 为什么要 eval这里要添加 ("("+data+")")呢? 原因在于:eval本身的问题

jquery序列化form表单使用ajax提交后处理返回的json数据

这篇文章主要介绍了jquery序列化form表单,使用ajax提交后处理返回的json数据的示例,需要的朋友可以参考下 1.返回json字符串: ** 将一个字符串输出到浏览器 */    protected void writeJson(String json) {        PrintWriter pw = null;        try {            servletResponse.setContentType("text/plain;charset=UTF-8"

jquery $.ajax()获取服务器上的json数据

$.ajax({ url: 'http://127.0.0.1/work/open.json', success: function(data) { var ob = data; if (typeof(data) == 'string') { ob = stringtoObject(data); } }); var stringtoObject = function(json) { return eval("(" + json + ")"); } url为获取jso

response 返回js的alert()语句,中文乱码如何解决

response 返回js的alert()语句,中文乱码如何解决, 步骤1:在后台加上如下代码: response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8;"); 完整参考代码如下: response.setCharacterEncoding("utf-8"); response.setContentType("tex