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 dreamers
表示这个解析的是一个字符串。
完美,这对我有帮助。以上是关于Delphi7中如何读取或显示Bytes类型的字段的主要内容,如果未能解决你的问题,请参考以下文章
如何更改delphi7中窗体(form)左上角的图标?都支持那些类型的图标,如,ico,jpe?为何更改图标后显示出错呢?不