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

  • Post author:
  • Post category:其他


【问题现象】

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



版权声明:本文为Cinway原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。