Delphi XE的原生JSONObject如何判断键值是否存在?

【问题现象】

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来转下码。

你可能感兴趣的:(Delphi,JSON,键值)