Delphi7中如何读取或显示Bytes类型的字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi7中如何读取或显示Bytes类型的字段相关的知识,希望对你有一定的参考价值。

大侠们好,我是delphi初学者,有个问题请帮助解决。 我用Delphi7的TBGrid浏览DB数据表时,对于Bytes类型的字段,TBGrid网格中只显示“[Bytes]”,请问如何字段的内容?多谢

参考技术A 转成指针型pchar或者其他类型再转string看看,有的时候做一个二次转换就可以实现的!
var
ok:string;
fc,i: Integer;
bytes : array of byte;

begin
写入:
fs := TFileStream.Create('car.dat', fmCreate);
ok:='This is it';
ok:=StrToHex(ok);
fc:=Length(ok); //此时ok值为:54686973206973206974
fs.Write(ok,fc);
fs.Destroy;

读取:
fs := TFileStream.Create('car.dat', fmOpenRead);
fc:=fs.Size;
SetLength(bytes,fc);
fs.Read(bytes[0],fc);
i:=0; //此时bytes的值为:(8, 225, 10, 1, 24, 255, 18, 0, 5, 210, 80, 0, 32, 255, 18, 0, 150, 213, 80, 0)
while i<fc do begin
ok:=ok+PChar(@bytes[i]);
inc(i);
end;
ok:=HexToStr(ok); //此时ok的值为:#8'?'#1#$18#$FF#$12'?'#1#$18#$FF#$12#$A#1#$18#$FF#$12#1#$18#$FF#$12#$18#$FF#$12#$FF#$12#$12#5'襊襊P '#$FF#$12#$FF#$12#$12'栒P誔P'
//并不是54686973206973206974
bytes:=nil;
ok:='';
fs.Destroy;追问

没明白

如何在python中读取json对象[重复]

【中文标题】如何在python中读取json对象[重复]【英文标题】:how to read json object in python [duplicate] 【发布时间】:2018-05-31 03:04:53 【问题描述】:

我有一个名为 "panamaleaks50k.json" 的 json 文件。我想从 json 文件中获取 ['text'] 字段,但它显示我出现以下错误

JSON 对象必须是 str、bytes 或 bytearray,而不是 'TextIOWrapper'

这是我的代码

with open('C:/Users/bilal butt/Desktop/PanamalEakJson.json','r') as lst:
    b = json.loads(lst)
    print(b['text'])

我的 json 文件外观

[

   "fullname": "Mohammad Fayyaz",
   "id": "885800668862263296",
   "likes": "0",
   "replies": "0",
   "retweets": "0",
   "text": "Love of NS has been shown in PanamaLeaks scandal verified by JIT...",
   "timestamp": "2017-07-14T09:58:31",
   "url": "/mohammadfayyaz/status/885800668862263296",
   "user": "mohammadfayyaz"
 ,

  "fullname": "TeamPakistanPTI \u00ae",
  "id": "885800910357749761",
  "likes": "0",
  "replies": "0",
  "retweets": "0",
  "text": "RT ArsalanISF: #PanamaLeaks is just a start. U won't believe whr...",
  "timestamp": "2017-07-14T09:59:29",
  "url": "/PtiTeampakistan/status/885800910357749761",
  "user": "PtiTeampakistan"
 
]

我如何阅读所有 ['text'] 和单个 ['text'] 字段?

【问题讨论】:

【参考方案1】:

如果您的输入是类似文件的对象(例如 TextIOWrapper),请使用 json.load(),而不是 json.loads()

给定以下完整的复制器:

import json, tempfile
with tempfile.NamedTemporaryFile() as f:
    f.write(b'"text": "success"'); f.flush()
    with open(f.name,'r') as lst:
        b = json.load(lst)
        print(b['text'])

...输出为success

【讨论】:

标记社区 wiki 以避免从已知的骗子那里获得代表。人们应该随意编辑/修改,尽管链接的答案应该被认为更规范。 我在使用 load() 函数时遇到了这个错误。 ` JSON 对象必须是 str、bytes 或 bytearray,而不是 'TextIOWrapper'` @BilalButt, load() 不会产生该错误——与问题中的代码使用的loads() 不同,load() 接受类似文件的对象作为输入。如果您断言确实如此,请编辑您的问题以添加minimal reproducible example - 其他人可以运行的最短代码,无需修改,自己查看问题。 (现在缩进是错误的,除了你之外没有人会拥有一个C:\Users\bilal butt 目录,所以这不是其他人可以调用的代码)。 感谢您的快速回复。我在我的问题中编辑 json 文件。 文件的内容不相关——文件可能只包含[],错误将完全相同。因此,minimal 复制器不需要包含超过 [] 的任何内容作为被解析的文件内容(但 应该 实际上创建一个包含这些内容的文件,如果可以的话'没有一个就不能复制)。【参考方案2】:

您应该将文件 contents(即字符串)传递给json.loads(),而不是文件对象本身。试试这个:

with open(file_path) as f:
    data = json.loads(f.read())
    print(data[0]['text'])

还有json.load() 函数,它接受一个文件对象并在后台为您执行f.read() 部分。

【讨论】:

一个字母 's' 的不同之处很有趣。恕我直言,这两种函数方法的命名应该在彼此之间更加引人注目。 @programmer dreamer s 表示这个解析的是一个字符串。 完美,这对我有帮助。

以上是关于Delphi7中如何读取或显示Bytes类型的字段的主要内容,如果未能解决你的问题,请参考以下文章

如何更改delphi7中窗体(form)左上角的图标?都支持那些类型的图标,如,ico,jpe?为何更改图标后显示出错呢?不

HBase int类型字段存储乱码

VS.C#如何向数据数据库中存入和读取图片的?

delphi中DBGrid里的数据满足条件的以显示红色

php如何读取clob字段

PostgreSQL java读取bytes字段