Javascript 创建对象时如何处理丢失的JSON数据?(打字稿)
我正在从GooglePlacesAPI检索数据,并将其直接转换到对象中,以便在其他地方使用 问题是,有时响应中没有所有字段,因此,当由于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" }
{ "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语句时,它尤其有用。