【问题现象】
Delphi XE的原生JSONObject,取出键值的时候如下:
//json是传入的参数,里面包括"food_name"等之类的键值,没有food_type键值
procedure XXXXFunciton(json:TJSONObject)
var
strFoodName,strFoodType:String;
begin
strFoodName:=json.Get('food_name').JsonValue.Value;
strFoodType:=json.Get('food_type').JsonValue.Value;
end;
系统会执行到“strFoodType:=json.Get('food_type').JsonValue.Value;”这一句出错。
【解决办法】
用JSONObject.TryGetValue方法来检查:
如下:
procedure XXXXFunciton(json:TJSONObject)
var
strFoodName,strFoodType:String;
jv:JSONValue; //这个JSONValue不用建立与释放
begin
strFoodName:=json.Get('food_name').JsonValue.Value;
if(json.TryGetValue('food_type',jv)) then
strFoodType:=json.Get('food_type').JsonValue.Value;
//或者strFoodType:=jv.Value;也可以,此时jv里也有一份值
end;
【其他说明】
如果遇到中文乱码,可以在传递进json之前,就是json变量在字符串转换成TJSONObject类型的时候用TEncoding.UTF8.GetBytes来转下码。
文章讲述了在DelphiXE中使用JSONObject取出键值对时遇到的问题,当尝试获取不存在的键如food_type时程序会出错。解决方案是使用TryGetValue方法来检查键是否存在,避免异常。此外,还提到了处理中文乱码的方法,即在转换为TJSONObject时使用TEncoding.UTF8.GetBytes进行编码转换。
2540

被折叠的 条评论
为什么被折叠?



