在Ubuntu中编译含有JSON的文件出现报错

在ubuntu中进行JSON相关学习的时候,我发现了一些小问题,决定与大家进行分享,减少踩坑时候出现不必要的时间耗费

截取部分含有JSON部分的代码进行展示

cpp 复制代码
char *str = "
				{  
				\"title\":\"JSON Example\",  
				\"author\": {  
				\"name\":\"John Doe\",  
				\"age\": 35,  
				\"isVerified\":true  
				},  
				\"tags\":[\"json\", \"syntax\", \"example\"],  
				\"rating\": 4.5,  
				\"isPublished\":false,  
				\"comments\": null  
				}";

按照JSON格式,在引号前边都需要加上 \ 反斜杠

其余部分的代码与本次的错误分享无关,暂不截图

打开终端执行 gcc -o json_test json_test.c 命令对本测试代码进行编译

以下为在编译过程中出现的报错,

可以发现报错的部分非常的多,而且都明显的指向 \ 反斜杠这一 方面的错误

以下为全部的报错

cpp 复制代码
json_test.c: In function 'main':
json_test.c:6:14: error: stray '\' in program
  char *str = \"
              ^
json_test.c:6:15: warning: missing terminating " character
  char *str = \"
               ^
json_test.c:6:15: error: missing terminating " character
json_test.c:8:5: error: stray '\' in program
     \"title\":\"JSON Example\",
     ^
json_test.c:8:6: warning: missing terminating " character
     \"title\":\"JSON Example\",
      ^
json_test.c:8:6: error: missing terminating " character
     \"title\":\"JSON Example\",
      ^~~~~~~~~~~~~~~~~~~~~~~~~~  
json_test.c:9:5: error: stray '\' in program
     \"author\": {
     ^
json_test.c:9:6: warning: missing terminating " character
     \"author\": {
      ^
json_test.c:9:6: error: missing terminating " character
     \"author\": {
      ^~~~~~~~~~~~  
json_test.c:10:5: error: stray '\' in program
     \"name\":\"John Doe\",
     ^
json_test.c:10:6: warning: missing terminating " character
     \"name\":\"John Doe\",
      ^
json_test.c:10:6: error: missing terminating " character
     \"name\":\"John Doe\",
      ^~~~~~~~~~~~~~~~~~~~~  
json_test.c:11:5: error: stray '\' in program
     \"age\": 35,
     ^
json_test.c:11:6: warning: missing terminating " character
     \"age\": 35,
      ^
json_test.c:11:6: error: missing terminating " character
     \"age\": 35,
      ^~~~~~~~~~~  
json_test.c:12:5: error: stray '\' in program
     \"isVerified\":true
     ^
json_test.c:12:6: warning: missing terminating " character
     \"isVerified\":true
      ^
json_test.c:12:6: error: missing terminating " character
     \"isVerified\":true
      ^~~~~~~~~~~~~~~~~~  
json_test.c:7:5: error: empty scalar initializer
     {
     ^
json_test.c:7:5: note: (near initialization for 'str')
json_test.c:14:5: error: stray '\' in program
     \"tags\":[\"json\", \"syntax\", \"example\"],
     ^
json_test.c:14:6: warning: missing terminating " character
     \"tags\":[\"json\", \"syntax\", \"example\"],
      ^
json_test.c:14:6: error: missing terminating " character
     \"tags\":[\"json\", \"syntax\", \"example\"],
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
json_test.c:15:5: error: stray '\' in program
     \"rating\": 4.5,
     ^
json_test.c:15:6: warning: missing terminating " character
     \"rating\": 4.5,
      ^
json_test.c:15:6: error: missing terminating " character
     \"rating\": 4.5,
      ^~~~~~~~~~~~~~~  
json_test.c:16:5: error: stray '\' in program
     \"isPublished\":false,
     ^
json_test.c:16:6: warning: missing terminating " character
     \"isPublished\":false,
      ^
json_test.c:16:6: error: missing terminating " character
     \"isPublished\":false,
      ^~~~~~~~~~~~~~~~~~~~~  
json_test.c:17:5: error: stray '\' in program
     \"comments\": null
     ^
json_test.c:17:6: warning: missing terminating " character
     \"comments\": null
      ^
json_test.c:17:6: error: missing terminating " character
     \"comments\": null
      ^~~~~~~~~~~~~~~~~  
json_test.c:18:5: error: expected identifier or '(' before '}' token
     }\";
     ^
json_test.c:18:6: error: stray '\' in program
     }\";
      ^
json_test.c:18:7: warning: missing terminating " character
     }\";
       ^
json_test.c:18:7: error: missing terminating " character
     }\";
       ^~

对于这个问题的解决其实不难,只需要在每一行的后边加上连词符号 \ 即可,将多行拼成1行

代码做出修改后如下:

cpp 复制代码
char *str = "\
				{  \
				\"title\":\"JSON Example\",\ 
				\"author\": {  \
							\"name\":\"John Doe\",\
							\"age\": 35,\
							\"isVerified\":true\
							}, \
				\"tags\":[\"json\", \"syntax\", \"example\"],\ 
				\"rating\": 4.5,\
				\"isPublished\":false,\
				\"comments\": null\
				}";

再次对其进行编译,之前的报错基本消失

但是,我们发现了另外一个警告错误

cpp 复制代码
json_test.c: In function 'main':
json_test.c:8:32: warning: backslash and newline separated by space
     \"title\":\"JSON Example\",\
                                 
json_test.c:14:51: warning: backslash and newline separated by space
     \"tags\":[\"json\", \"syntax\", \"example\"], \
                                                    
/tmp/ccFimHV4.o: In function `main':
json_test.c:(.text+0x22): undefined reference to `cJSON_Parse'
json_test.c:(.text+0x39): undefined reference to `cJSON_GetObjectItem'
collect2: error: ld returned 1 exit status

同时回到text editor代码中,发现代码中反斜杠居然会出现两种颜色

这个现象很有意思,一开始并没有注意这是为什么,后边结合警告

在这几个颜色不同的反斜杠之间瞎点,发现一个小问题

这些不同于大众的颜色的反斜杠,后边带有空格,其他的没有

尝试着将后边的空格去掉之后,再次进行编译,前边的警告错误荡然无存

相关推荐
乌托邦的逃亡者1 分钟前
Dockerfile的配置和使用
linux·运维·docker·容器
小此方4 分钟前
Re:Linux系统篇(三)指令篇 · 二:十二个高频指令精讲+重定向操作+“一切皆文件“深入理解
linux·运维·服务器
十五年专注C++开发9 分钟前
MobaXterm:Windows 远程工作全能工具箱
linux·windows·mobaxterm
wohehe13 分钟前
Android项目工程化-Github Actions
linux·github
赵庆明老师1 小时前
vben开发入门6:tsconfig.json
json·vue3·vben
REDcker1 小时前
Linux disown命令详解 后台作业脱管与终端退出
linux·运维·chrome
cyber_两只龙宝2 小时前
【Oracle】Oracle之SQL的转换函数和条件表达式
linux·运维·数据库·sql·云原生·oracle
努力努力再努力wz2 小时前
【Linux网络系列】深入理解 I/O 多路复用:从 select 痛点到 poll 高并发服务器落地,基于 Poll、智能指针与非阻塞 I/O与线程池手写一个高性能 HTTP 服务器!(附源码)
java·linux·运维·服务器·c语言·c++·python
努力努力再努力wz2 小时前
【Linux网络系列】万字硬核解析网络层核心:IP协议到IP 分片重组、NAT技术及 RIP/OSPF 动态路由全景
java·linux·运维·服务器·数据结构·c++·python
.千余2 小时前
【Linux】基本指令2
linux·运维·服务器