【问题标题】:How to parse JSON response in C Linux?如何在 C Linux 中解析 JSON 响应?
【发布时间】:2015-04-13 06:43:05
【问题描述】:

我使用了许多工具,例如 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结构的输出?

【问题讨论】:

  • Parsing JSON using C 的可能重复项
  • 关闭,因为这太宽泛了。这是关于仅基于标题的解析超出您的理解范围的解析。

标签: c json parsing cjson


【解决方案1】:

您需要添加从解析的 JSON 值中提取相关字段等的显式代码...这通常不能神奇地自动化。

一些 JSON 库稍微促进了这项任务。例如,jansson 有一个非常有用的 json_unpack 函数,您可以使用它从解析的 JSON 值中提取(在一次调用中)一些字段。

但是你有责任从 JSON 值中提取和验证信息,因为只有你才能知道 JSON 的真正含义。

JSON 只是一种方便的文本serialization 格式。赋予数据实际意义取决于您。您还可以决定要编码哪种验证(您在多大程度上信任该 JSON 数据的发射器?)。如果数据来自 Internet(例如 AJAX 查询等),您应该尽可能少地信任它并尽可能地对其进行验证。

不要忘记记录 JSON 数据的含义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 2013-01-26
    • 2017-04-27
    相关资源
    最近更新 更多