Javascript 创建对象时如何处理丢失的JSON数据?(打字稿)

Javascript 创建对象时如何处理丢失的JSON数据?(打字稿),javascript,json,typescript,object,Javascript,Json,Typescript,Object,我正在从GooglePlacesAPI检索数据,并将其直接转换到对象中,以便在其他地方使用 问题是,有时响应中没有所有字段,因此,当由于JSON响应中缺少字段而无法正确创建对象时,这会导致我的应用程序崩溃 下面是我所说的一个例子: 例如,假设响应的格式如下: { "a" : "some_str", "b" : "some_str", "c" : "some_str" } 但有时字段“b”会丢失,因此响应如下所示: { "a" : "some_str", "c" : "some_str" }

我正在从GooglePlacesAPI检索数据,并将其直接转换到对象中,以便在其他地方使用

问题是,有时响应中没有所有字段,因此,当由于JSON响应中缺少字段而无法正确创建对象时,这会导致我的应用程序崩溃

下面是我所说的一个例子:

例如,假设响应的格式如下:

{ "a" : "some_str", "b" : "some_str", "c" : "some_str" }
但有时字段“b”会丢失,因此响应如下所示:

{ "a" : "some_str", "c" : "some_str" }
当我尝试将JSON数据解析为对象时,如何解释这一点

例如,下面是我用来解析数据的代码:

this.http.get(URL).subscribe(details => {
    let detailsObj = details.json();
    let myObj: SomeObject = {
        "fieldA" : detailsObj.a,
        "fieldB" : detailsObj.b,
        "fieldC" : detailsObj.c,
    }
});
如果JSON响应中不存在字段“b”,则“detailsObj”上的值将未定义,这会导致运行时错误,因为它试图创建具有未定义字段的对象

尽管存在部分未定义的数据,我如何仍然创建对象?理想情况下,丢失的数据可以用空值填充


任何指向正确方向的指示都将不胜感激,谢谢您的时间

当缺少
b
时,使用
|
填写
null

"fieldB" : detailsObj.b || null,
或者更稳健,特别检查
未定义的

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

第一个选项更简洁,更容易阅读,但是如果
b
0
false
或其他一些虚假值,它会将值设置为
null

您是否尝试过LoDash.get函数?你能行

Const _ = require("lodash");
"fieldA": _.get(detailsObj, "a", null);
您可以尝试以下方法:

interface SampleInterface {

    a ?: string;
    b ?: string;
    c ?: string;
}

var obj = { "a" : "some_str1", "c" : "some_str3" };

 sampleInterface : SampleInterface = obj;
 console.log(SampleInterface.b);

你的应用程序不会在此崩溃。它将通过未定义。为什么
null
undefined
更好?@Dem Pilafian非常感谢这是我一直在寻找的,我知道有办法做到这一点。@JonasW。通常,
null
明确表示“不存在”,而
undefined
则表示“未提供任何信息”。虽然这两者在技术上通常是可互换的,但语义却有微妙的不同。在OP的问题中,似乎
undefined
导致了问题,而
null
起作用。我的上一个项目广泛使用了lodash,并且uz.get()是解决此类问题的一个非常有用的函数。当您有深度嵌套的对象并且希望避免objectA.objectB.objectC语句时,它尤其有用。