本文介绍了Delphi JSON解析器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 我当前的代码:procedure TForm1.Button10Click(Sender: TObject);var IdHTTP: TIdHTTP; IdSSL: TIdSSLIOHandlerSocketOpenSSL; JSON: string; jsonObiekt: TJSONObject; streams: TJSONValue; liczbaStrumieni: integer; i: integer;begin IdHTTP := TIdHTTP.Create; try IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP); IdHTTP.IOHandler := IdSSL; IdHTTP.Request.CustomHeaders.AddValue('Accept', 'application/vnd.twitchtv.v3+json'); IdHTTP.Request.CustomHeaders.AddValue('Client-ID', 'smb61nyd0vxmqdn9d3k735qbx41cdyg'); JSON := IdHTTP.Get('https://api.twitch.tv/kraken/streams?game=StarCraft:%20Brood%20War'); finally IdHTTP.Free; end; jsonObiekt := nil; try jsonObiekt := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(JSON), 0) as TJSONObject; streams := jsonObiekt.Get('streams').JsonValue; liczbaStrumieni := TJSONArray(streams).Size; for i := 0 to liczbaStrumieni - 1 do begin Memo6.Lines.Add(TJSONObject(TJSONArray(streams).Get(i)).Get('viewers').JsonValue.Value); end; finally jsonObiekt.Free; end;end;使用此代码,我能够为流中的每个条目吸引观众With this code i am able to get viewers for every entries in "streams"我的目标是获得状态(来自渠道),但这对我来说太难了。尝试从此了解如何在Delphi XE2中解析嵌套的JSON对象? ,但没有结果,仍然不太了解。感谢帮助。My goal is to get "status" from "channel", but thats too hard for me. Tried learn from this How to parse nested JSON object in Delphi XE2? but no result, still dont understand it well. Thanks for help.推荐答案这有助于将子对象分解为自己的变量,不要试图在单个语句中完成所有操作。试试这个:It helps to break up the subobjects into their own variables, don't try to do everything in a single statement. Try this:procedure TForm1.Button10Click(Sender: TObject);var IdHTTP: TIdHTTP; IdSSL: TIdSSLIOHandlerSocketOpenSSL; JSON: string; jsonObiekt: TJSONObject; streams: TJSONArray; stream: TJSONObject; channel: TJSONObject; status: TJSONString; liczbaStrumieni: integer; i: integer;begin IdHTTP := TIdHTTP.Create; try IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP); IdHTTP.IOHandler := IdSSL; IdHTTP.Request.Accept := 'application/vnd.twitchtv.v3+json'; IdHTTP.Request.CustomHeaders.AddValue('Client-ID', 'smb61nyd0vxmqdn9d3k735qbx41cdyg'); JSON := IdHTTP.Get('https://api.twitch.tv/kraken/streams?game=StarCraft:%20Brood%20War'); finally IdHTTP.Free; end; jsonObiekt := TJSONObject.ParseJSONValue(JSON) as TJSONObject; try streams := jsonObiekt.Get('streams').JsonValue as TJSONArray; liczbaStrumieni := streams.Size; for i := 0 to liczbaStrumieni - 1 do begin stream := streams.Get(i) as TJSONObject; channel := stream.Get('channel').JsonValue as TJSONObject; status := channel.Get('status').JsonValue as TJSONString; Memo6.Lines.Add(status.Value); end; finally jsonObiekt.Free; end;end;或者,将JSON下载为字节,所以 TIdHTTP 不会将它们解码为UTF-16,因此 TJSONObject 可以按原样解析原始字节:Alternatively, download the JSON as bytes so TIdHTTP will not decode them to UTF-16, and thus TJSONObject can parse the original bytes as-is:procedure TForm1.Button10Click(Sender: TObject);var IdHTTP: TIdHTTP; IdSSL: TIdSSLIOHandlerSocketOpenSSL; JSON: TBytesStream; jsonObiekt: TJSONObject; streams: TJSONArray; stream: TJSONObject; channel: TJSONObject; status: TJSONString; liczbaStrumieni: integer; i: integer;begin jsonObiekt := nil; try JSON := TBytesStream.Create; try IdHTTP := TIdHTTP.Create; try IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP); IdHTTP.IOHandler := IdSSL; IdHTTP.Request.Accept := 'application/vnd.twitchtv.v3+json'; IdHTTP.Request.CustomHeaders.AddValue('Client-ID', 'smb61nyd0vxmqdn9d3k735qbx41cdyg'); IdHTTP.Get('https://api.twitch.tv/kraken/streams?game=StarCraft:%20Brood%20War', JSON); finally IdHTTP.Free; end; jsonObiekt := TJSONObject.ParseJSONValue(JSON.Bytes, 0, JSON.Size) as TJSONObject; finally JSON.Free; end; streams := jsonObiekt.Get('streams').JsonValue as TJSONArray; liczbaStrumieni := streams.Size; for i := 0 to liczbaStrumieni - 1 do begin stream := streams.Get(i) as TJSONObject; channel := stream.Get('channel').JsonValue as TJSONObject; status := channel.Get('status').JsonValue as TJSONString; Memo6.Lines.Add(status.Value); end; finally jsonObiekt.Free; end;end; 这篇关于Delphi JSON解析器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!