json解析ライブラリ-jansson使用

3077 ワード

json解析Cライブラリは多く、比較的よく使われるのはcjsonですが、cjsonがファイルを読み取るとき、エラーが発生したとき、どの行にあるのか分からないので、janssonライブラリのいいところだと思います.
ソースのダウンロード
著者github倉庫:https://github.com/akheron/jansson私のgithub倉庫、コードは動いていないで、ただ私の個人の注釈を加えて、ソースコードを学びたい学生はgithubリンクを通じてソースコードをダウンロードすることができます.https://github.com/jxdeng3264/jansson
コンパイル
linuxでのコンパイルは比較的簡単で、三部作をコンパイルします./configure->make->make installブログを書くために、スクリーンショット処理が便利であるため、主な例windowsでの使用.janssonは豊富な例を提供して、勉強しやすいので、まず使用例を理解して、それからソースコードを読むことをお勧めします.
Windowsの下の例は、先にコンパイルする必要があります.コンパイルに必要な環境
a. cmake
b.vistual studio、私のvsバージョンはvs 2013ですが、コンパイラバージョンは12です.
1.ダウンロードしたzipファイルの場合は、まずコードを解凍し、コードディレクトリjanssonディレクトリ2に入る.md build 3. cd build
cmake-G「Visual Studio 12」...上の最後に2つの点があり、上位ディレクトリを示しています.なぜMarkdownの2つの点が最後に3つの点を表示したのか分かりません.どうすればいいか知っていれば、コンパイルに成功した後、buildディレクトリの下ですべてのテストエンジニアリングが生成されます.buildディレクトリのlibフォルダの下にDebugディレクトリの下に静的ライブラリjansson_d.lib 2つのヘッダファイルディレクトリprivate_includeとinclude build +lib  +Debug/jansson_d.lib  + private_include  + include
テストプログラムの実行
janssonをダブルクリックします.slnは、小さなテストコードがたくさん見えます.test_arrayはプロジェクトを起動し、コンパイル、実行するように設定し、何も出力されていないことがわかります.コードを通じて、エラーがない場合、出力されていないことがわかります.
janssonソースコードを自分のプロジェクトに直接使用するにはどうすればいいですか?
静的ライブラリを使用しないで、直接ソースコードを使用すると、コンパイルされたbuildディレクトリの下のいくつかのヘッダファイルをソースコードのsrcディレクトリの下に寄せて、元のコードを上書きすることができます.そして使うときは、そのまま#include"jansson.h"でいいです.
次に、一般的な関数操作をいくつか示します.
char *text = "{"key":1,"key2":2}";
json_t *root;
json_error_t error;
root = json_loads(text, 0, &error);
void print_json_aux(json_t *element, int indent) {
	switch (json_typeof(element)) {
	case JSON_OBJECT:
		print_json_object(element, indent);
		break;
	case JSON_ARRAY:
		print_json_array(element, indent);
		break;
	case JSON_STRING:
		print_json_string(element, indent);
		break;
	case JSON_INTEGER:
		print_json_integer(element, indent);
		break;
	case JSON_REAL:
		print_json_real(element, indent);
		break;
	case JSON_TRUE:
		print_json_true(element, indent);
		break;
	case JSON_FALSE:
		print_json_false(element, indent);
		break;
	case JSON_NULL:
		print_json_null(element, indent);
		break;
	default:
		fprintf(stderr, "unrecognized JSON type %d
", json_typeof(element)); } }
void print_json_true(json_t *element, int indent) {
	(void)element;
	print_json_indent(indent);
	printf("JSON True
"); }

次にprint_を見てみましょうjson_object関数の実装により、json形式の文字列がすべてのキー値にどのように遍歴するかを見ることができます.
void print_json_object(json_t *element, int indent) {
	size_t size;
	const char *key;
	json_t *value;

	print_json_indent(indent);
	size = json_object_size(element);

	printf("JSON Object of %ld pair%s:
", size, json_plural(size)); json_object_foreach(element, key, value) { print_json_indent(indent + 2); printf("JSON Key: \"%s\"
", key); print_json_aux(value, indent + 2); } }

次編ではjsonについて詳しく紹介しますobject_foreachマクロの次の文章、「jassonソースコード読書」、注目を歓迎します.問題のある友達を理解したり編集したりしないでコメントすることができます!