小编Big*_*iny的帖子

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

我正在从 Google Places API 检索数据并将其直接转换为对象以供在其他地方使用。

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

这是我正在谈论的一个例子:

例如,响应的格式是这样的:

{ "a" : "some_str", "b" : "some_str", "c" : "some_str" }
Run Code Online (Sandbox Code Playgroud)

但有时字段“b”会丢失,因此响应如下所示:

{ "a" : "some_str", "c" : "some_str" }
Run Code Online (Sandbox Code Playgroud)

当我尝试将 JSON 数据解析为对象时,如何解释这一点?

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

this.http.get(URL).subscribe(details => {
    let detailsObj = details.json();
    let myObj: SomeObject = {
        "fieldA" : detailsObj.a,
        "fieldB" : detailsObj.b,
        "fieldC" : detailsObj.c,
    }
});
Run Code Online (Sandbox Code Playgroud)

如果 JSON 响应中不存在字段“b”,则“detailsObj”上的值将是未定义的,这会导致运行时错误,因为它试图创建具有未定义字段的对象。

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

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

javascript json object typescript

5
推荐指数
1
解决办法
6561
查看次数

如何将cpp Rest sdk(cassablanca)添加到Mac上VSCode中的项目中

我正在尝试安装 cpprestsdk 并将其添加到我的 c++ 项目中,但我似乎不知道如何执行此操作。

我已按照此处的说明进行操作:

https://github.com/Microsoft/cpprestsdk/wiki/How-to-build-for-Mac-OS-X

这让我在 cassablanca 包上构建并运行测试,结果成功。

然后我尝试遵循本指南:

https://github.com/Microsoft/cpprestsdk/wiki/Getting-Started-Tutorial

但是当尝试包含头文件时,例如:

#include "<cpprest/http_client.h>"
#include <cpprest/filestream.h>
Run Code Online (Sandbox Code Playgroud)

运行我的 make 文件时出现错误。

我一直在尝试找到一些有关如何在编译时将文件实际添加到我的构建中的文档,但一直找不到任何内容。

这是我的 makefile 的内容:

CC := g++
CFLAGS := -std=c11

csrc = $(wildcard src/*.cpp) \
       $(wildcard include/*.hpp) \
       $(wildcard libs/*)

obj = $(csrc:.c=.o) 

LDFLAGS = -Wall -lcpprest


localcoin: $(obj)
    $(CC) $^ $(LDFLAGS) 
Run Code Online (Sandbox Code Playgroud)

运行 make 时,我收到大量源自 cassablanca 安装文件的错误。

我是 C++/C 编程新手,所以对 makefile 的经验很少。

我的问题是,如何将 cpprestsdk 添加到我的项目中以便我可以成功使用该库?

非常感谢您抽出宝贵时间,我们将不胜感激任何批评或指导。

c++ rest casablanca cpprest-sdk

5
推荐指数
0
解决办法
1409
查看次数

迅捷:For循环按大于1的索引遍历枚举数组

有没有一种方法可以使用.enumerated()和stride来通过索引大于1的字符串数组使用for-in循环,以保持索引和值?

例如,如果我有数组

var testArray2:[String] = [“ a”,“ b”,“ c”,“ d”,“ e”]

我想通过使用testArray2.enumerated()并遍历2来输出:

0, a
2, c
4, e
Run Code Online (Sandbox Code Playgroud)

所以理想上是这样的;但是,此代码将不起作用:

for (index, str) in stride(from: 0, to: testArray2.count, by: 2){
    print("position \(index) : \(str)")
}
Run Code Online (Sandbox Code Playgroud)

stride for-in-loop swift enumerated

0
推荐指数
1
解决办法
3024
查看次数