我使用了许多工具,如cJSON,nxjson和jsmn解析器来解析JSON响应,但我使用的工具都没有以某种结构格式提供输出。下面是我在字符串中的JSON响应:
{"Code":1,"MSN":0,"HWID":7001,"Data":{"SignOffRequest":{"messageId":0,"barCodeReadErrorCnt":0,"markSenseReadErrorCnt":0,"markSenseValidationErrorCnt":0,"postPrintErrorCnt":0,"custTicketFeedErrorCnt":0,"custInputTicketJamsCnt":0,"keyStrokeCnt":0,"keyStrokeErrorCnt":0,"commCrcErrorCnt":0,"readTxnCnt":0,"keyedTxnCnt":0,"ticketMotionErrorCnt":0,"blankFeedErrorCnt":0,"blankTicketJamCnt":0,"startupNormalRespCnt":0,"startupErrorRespCnt":0,"primCommMesgSentCnt":0,"commRetransmitTxnCnt":0,"rawMessage":null,"TableUpdateNo":1,"FixtureUpdateNo":0}}}
我使用过cJSON工具,输出如下所示,也是一个字符串:
{
"Code": 1,
"MSN": 0,
"HWID": 7001,
"Data": {
"SignOffRequest": {
"messageId": 0,
"barCodeReadErrorCnt": 0,
"markSenseReadErrorCnt": 0,
"markSenseValidationErrorCnt": 0,
"postPrintErrorCnt": 0,
"custTicketFeedErrorCnt": 0,
"custInputTicketJamsCnt": 0,
"keyStrokeCnt": 0,
"keyStrokeErrorCnt": 0,
"commCrcErrorCnt": 0,
"readTxnCnt": 0,
"keyedTxnCnt": 0,
"ticketMotionErrorCnt": 0,
"blankFeedErrorCnt": 0,
"blankTicketJamCnt": 0,
"startupNormalRespCnt": 0,
"startupErrorRespCnt": 0,
"primCommMesgSentCnt": 0,
"commRetransmitTxnCnt": 0,
"rawMessage": null,
"TableUpdateNo": 1,
"FixtureUpdateNo": 0
}
}
}
但我不希望以上述格式输出。我希望输出采用C结构的形式。是否可以在C结构中获得输出?
答案 0 :(得分:4)
您需要添加显式代码,从解析后的JSON值中提取相关字段等...这通常不会神奇地自动化。
一些JSON库稍微促进了这项任务。例如,jansson有一个非常有用的json_unpack函数,您可以使用该函数从解析的JSON值中提取(在单个调用中)某些字段。
但是你的责任来编码从JSON值中提取和验证信息的代码,因为只有你才能知道JSON的真正含义。
JSON只是一种方便的文字serialization格式。您需要为数据赋予实际意义。您还可以决定要编码的验证类型(您在多大程度上信任该JSON数据的发射器?)。如果数据来自互联网(例如AJAX查询等),您应该尽可能少地信任它并尽可能地验证它。
不要忘记记录JSON数据的含义。