mormot 使用json笔记1,
转到lazarus原来superobject用不了,lazarus原生的json(引用fpjson, jsonparser,)存在编码问题,很多网络json是用unicode编码,软件用utf8都乱码了,使用mormot的json还可以,就是引用的文件比较多
使用方法一:直接使用
procedure TForm1.Button3Click(Sender: TObject);
var
jObject,jo1:TDocVariantData;
s:string;
i:integer;
begin
jObject.InitJSON('{}',[dvoCheckForDuplicatedNames]);//
s:='中国人';
jObject.U['Username']:=s;//lazarus要用U,不然会乱码,Utf8编码
jo1.Init();//:=(jobject.O_['data']^);
jo1.U['addr']:='家庭地址';
jo1.U['workaddr']:='工作单位';
// jobject.O_['data']^.AddValueFromText('addr','三中');//这个也可以加添加
jobject.O_['data']^.AddOrUpdateFrom(_json(jo1.ToJSON()),false);//.O 没有值则不添加和.O_没有则添加
//O是对象‘{}‘,A是列表'[]'
s:=jObject.ToJSON();
//showmessage((s));
memo1.Append((s));
memo1.Append(jo1.ToJSON());
jo1.U['addr']:='新工作单位';
jobject.O_['data']^.AddOrUpdateFrom(_json(jo1.ToJSON()),false);//更新数据
s:=jObject.ToJSON();
memo1.Append((s));
memo1.Append(jo1.ToJSON());
jo1.Clear;//不影响jobject数据
s:=jObject.ToJSON();
memo1.Append((s));
memo1.Append(jo1.ToJSON());
s:=jObject.u['Username'];
jdata:=jobject.getValueByPath('data.addr');
memo1.Append(jdata);
end;
使用方法二:: variant类型, 可能用用对象形式访问!
procedure TForm1.Button4Click(Sender: TObject);
var
jData: variant;
jObject,jo1:TDocVariantData;
begin
TDocVariantData(jData).InitJSON('{}');//初始化,不然后面会出错
jdata.ymf:='张三' ;
jdata.NAME:='loadymf';
jobject.InitJSON('{}');//没有初始化最后会有很多null出现
jobject.AddOrUpdateFrom(jdata,true);//jobject.O_['data']^.AddOrUpdateFrom(jdata,true);
jobject.AddOrUpdateFrom(jdata,true);
memo1.Append(jobject.ToJSON());
end;