山东网站seo,南京网站建设流程,项目管理pmp,软件开发文档【问题现象】
Delphi XE的原生JSONObject#xff0c;取出键值的时候如下#xff1a;
//json是传入的参数#xff0c;里面包括food_name等之类的键值#xff0c;没有food_type键值
procedure XXXXFunciton(json:TJSONObject)
var strFoodName,strFoodType:S…【问题现象】
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来转下码。