2

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構造で出力を取得することは可能ですか?

4

1 に答える 1

4

解析された JSON 値から関連するフィールドなどを抽出する明示的なコードを追加する必要があります...これは一般的に魔法のように自動化することはできません。

一部の JSON ライブラリは、このタスクをわずかに容易にします。たとえば、janssonには非常に便利なjson_unpack関数があり、これを使用すると、解析された JSON 値からいくつかのフィールドを (1 回の呼び出しで) 抽出できます。

ただし、JSON 値からの情報の抽出と検証をコーディングするのはユーザーの責任です。その JSON が実際に何を意味するかを知ることができるのはユーザーだけだからです。

JSONは、単なる便利なテキストのシリアル化形式です。データに実際の意味を与えるのはあなた次第です。また、コーディングする検証の種類を決定するのも開発者次第です (JSON データのエミッターをどの程度信頼しますか?)。データがインターネット (AJAX クエリなど) からのものである場合は、可能な限り信頼せず、可能な限り検証する必要があります。

JSON データの意味を文書化することを忘れないでください。

于 2015-04-13T06:49:44.027 に答える