【问题现象】
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来转下码。