使用NewtonSoft.Json解析JSON遇Unexpected end of string错误求助
JSON解析错误排查及修复方案
问题根源
你的JSON存在核心语法问题,引发了一系列解析报错:
- 多行字符串未转义:JSON规范要求字符串内的换行必须用
\n转义,不能直接换行。原fields字段的内容直接换行,导致解析器认为字符串提前结束,触发"Unexpected end of string"错误。 - 连锁语法误解:VSCode的其他报错(如"Expected Comma"、"Colon Expected"、"Property Keys must be double quoted")是连锁反应——解析器错误地将未转义换行后的内容当作JSON结构的一部分,而非字符串内容,因此把字段名(如MED_CLM_SK)当成了JSON属性键,要求符合JSON键的语法规则。
修复后的JSON示例
方案1:转为单行字符串(推荐,更简洁)
{ "tables": [ "%USER%.ABCDE_FAC_FINAL_%YEAR%", "%USER%.ABCDE_FAC_STAGE_%YEAR%", "%USER%.ABCDE_PROF_FINAL_%YEAR%", "%USER%.UABCDE_PROF_STAGE_%YEAR%" ], "fields": "(MED_CLM_SK NUMBER(18) not null, MED_SRVLN_SK NUMBER(18) not null, PMT_DT_KEY NUMBER(18) not null, CLM_CTRL_NUM VARCHAR2(50) null, LINE_CNTR_NUM NUMBER(18) null, PCES_HCPCS_CPT_PROC_CD VARCHAR2(50) null, REV_CD VARCHAR2(50) null, NS_IPUT_SRC_CD VARCHAR2(50) null, PLACE_OF_SERV_CD VARCHAR2(50) null, TOS_CD VARCHAR2(50) null, SERV_FR_DT_KEY NUMBER(18) null, NS_SUBS_CERT VARCHAR2(50) null, PAT_FULL_NAME VARCHAR2(50) null, PAT_BRTH_DT_KEY NUMBER(18) null, RECD_DT INTEGER null, LN_PROR_AMT NUMBER(18) null, LN_CHG_AMT NUMBER(18) null, TAX_ID VARCHAR2(25) null, LIC_NUM VARCHAR2(20) null, LINE_DISP VARCHAR2(2) null)" }
方案2:保留换行并转义
如果需要保留原格式的换行,需对每个换行添加\n转义:
{ "tables": [ "%USER%.ABCDE_FAC_FINAL_%YEAR%", "%USER%.ABCDE_FAC_STAGE_%YEAR%", "%USER%.ABCDE_PROF_FINAL_%YEAR%", "%USER%.UABCDE_PROF_STAGE_%YEAR%" ], "fields": "(\n MED_CLM_SK NUMBER(18) not null \n ,MED_SRVLN_SK NUMBER(18) not null \n ,PMT_DT_KEY NUMBER(18) not null \n ,CLM_CTRL_NUM VARCHAR2(50) null \n ,LINE_CNTR_NUM NUMBER(18) null \n ,PCES_HCPCS_CPT_PROC_CD VARCHAR2(50) null\n ,REV_CD VARCHAR2(50) null\n ,NS_IPUT_SRC_CD VARCHAR2(50) null \n ,PLACE_OF_SERV_CD VARCHAR2(50) null\n ,TOS_CD VARCHAR2(50) null\n ,SERV_FR_DT_KEY NUMBER(18) null\n ,NS_SUBS_CERT VARCHAR2(50) null\n ,PAT_FULL_NAME VARCHAR2(50) null\n ,PAT_BRTH_DT_KEY NUMBER(18) null\n ,RECD_DT INTEGER null \n ,LN_PROR_AMT NUMBER(18) null \n ,LN_CHG_AMT NUMBER(18) null \n ,TAX_ID VARCHAR2(25) null \n ,LIC_NUM VARCHAR2(20) null \n ,LINE_DISP VARCHAR2(2) null \n\n)" }
修复原理
将fields的内容处理为符合JSON规范的字符串:要么合并为单行,要么对换行符转义,确保解析器将整个内容识别为单个字符串值,而非JSON结构的一部分,这样就能解决所有报错,NewtonSoft.Json也能正常解析。
内容的提问来源于stack exchange,提问作者Mark Ainsworth
相关产品推荐
相关产品推荐

