如何在创建对象时处理缺少的JSON数据? (打字稿)

时间:2018-01-23 06:15:05

标签: javascript json typescript object

我正在从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。

非常感谢任何正确方向的指示,谢谢您的时间!

3 个答案:

答案 0 :(得分:2)

||缺失时使用null填写b

"fieldB" : detailsObj.b || null,

或更健壮,特别检查undefined

"fieldB" : detailsObj.b === undefined ? null : detailsObj.b,

第一个选项更简洁,更易于阅读,但如果nullb0或其他一些假值,则会将值设置为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);