2017-01-10 7 views
-3

外部ライブラリなしで手動で解析する必要があります。サーバーからのメッセージJSONC languageです。Cで手動でJSONメッセージを解析する

サーバーからのメッセージは次のようになります:私はSTP:後に番号が必要

{[CR+LF] 
"Tmg": "R",[CR+LF] 
"STP": 72[CR+LF] 
}[CR+LF] 

または

{[CR+LF] 
"Tmg": "R",[CR+LF] 
"STP": 150[CR+LF] 
}[CR+LF] 

。その番号は各メッセージ構造によって異なりますので、JSON構造からその番号を取得する必要があります。このコードは組み込みシステムにあり、外部コードは使用できないため、外部ライブラリは使用できません。

私はこの次のことを試してみました:

int main(){ 
    const char response_message[35] = "{\r\n\"Tmg\":\"R\",\r\n\"STP\":72,\r\n}"; 
    const char needle[8] = "P\":"; 
    char *ret; 

    ret = strstr(response_message, needle); 

    printf("The number is: %s\n", ret); 

return 0; 
} 

しかし、明らかに、私はこの結果を取得しています:

The number is: P":72, 
} 

は、だから、私はこれを取得することができますどのように、唯一の番号を取得する必要がありますか?

ありがとうございました

+3

too broad!スタックオーバーフローは私の仕事ではありません!あなたは 'strtok()'を使うことができます – Stargateur

+0

正規表現を使っていくつかの文字列パターンを定義し、このパターンから特定の情報を得ることができます。 C言語用の正規表現ライブラリを調べてください。 – ffguven

答えて

2

ハッキングされたソリューションを使用できます。 strstr()を使って "STP"を見つけてください:次の、または}を見つけて、その間に数字を抽出してください。

これはハックです。仕事が保証されていません。動作することが保証されているものについては、JSONパーサーを使用します。

+1

実際の問題は、メッセージがどのように生成され、その構造のどの部分が保証されるかです。それが明示的にその方法で生成され、高水準の構造体とJSONライブラリ(JSONメッセージのようにしか見えない場合)とは違って、これはハックではなく専用のパーサーです。 –

関連する問題