我正在从Google Places API中检索数据并将其直接投放到对象中以供在其他地方使用。
问题是有时响应没有所有字段,因此当JSON响应中缺少字段而导致无法正确创建对象时,这会导致我的应用程序崩溃。
以下是我所说的一个例子:
例如,回复的格式如下:
{ "a" : "some_str", "c" : "some_str" }
但偶尔字段“b”将丢失,因此响应如下:
this.http.get(URL).subscribe(details => {
let detailsObj = details.json();
let myObj: SomeObject = {
"fieldA" : detailsObj.a,
"fieldB" : detailsObj.b,
"fieldC" : detailsObj.c,
}
});
当我尝试将JSON数据解析为对象时,如何解释这一点?
例如,这是我将用于解析数据的代码:
<textarea>
如果JSON响应中不存在字段“b”,则“detailsObj”上的值将是未定义的,这会导致运行时错误,因为它尝试创建具有未定义字段的对象。
尽管存在部分未定义的数据,我仍然可以创建对象吗?理想情况下,缺少的数据可以填充为null。
非常感谢任何正确方向的指示,谢谢您的时间!
答案 0 :(得分:2)
在||
缺失时使用null
填写b
"fieldB" : detailsObj.b || null,
或更健壮,特别检查undefined
:
"fieldB" : detailsObj.b === undefined ? null : detailsObj.b,
第一个选项更简洁,更易于阅读,但如果null
为b
或0
或其他一些假值,则会将值设置为false
。
答案 1 :(得分:1)
您是否尝试过LoDash _.get功能?你可以做到
Const _ = require("lodash");
"fieldA": _.get(detailsObj, "a", null);
答案 2 :(得分:0)
你可以试试这个:
interface SampleInterface {
a ?: string;
b ?: string;
c ?: string;
}
var obj = { "a" : "some_str1", "c" : "some_str3" };
sampleInterface : SampleInterface = obj;
console.log(SampleInterface.b);