Cを使用したJSONの解析[クローズ]


82

私はCでJSONを解析するための良い方法を見つけようとしています。私は本当に巨大なライブラリなどを必要としません。むしろ、最小限の機能を備えた小さくて軽量なものが欲しいのですが、優れたドキュメントです。

誰かが私に指摘できるものはありますか?


5
Linuxディストリビューションを使用していますか?
ニック


Objective-Cライブラリは機能しますか?私は、obj-cで非常に使いやすく、小さいときにMacでTouchJsonを使用します。
ニック

あなたが「ベアミニマム」と言うとき、あなたは実際にどれくらいミニマルに行くことができますか?いくつかは、いくつかのちょうどUTF-8、および一部のみ注意を払うようなASCII「形式の文字」さまざまなUnicodeのエンコーディングを処理する{[]},"、およびバックスラッシュを。彼らはUnicodeエスケープシーケンスをあなたに任せるかもしれないし、任せないかもしれないし、数字が許容されるUnicode範囲内にあるかどうかをチェックするのはあなたに任せるかもしれない、など。構造体。
hippietrail 2013年

関連:
ANSICで

回答:


74

Jsonはそもそも巨大な言語ではないので、そのためのライブラリは小さい可能性があります(少なくともXmlライブラリよりも)。

そこの全体トンCはJson.orgでリンクされたライブラリ。たぶんそれらの1つはあなたのためにうまくいくでしょう。


3
答えてくれてありがとう!私はそれらの束を調べました、そしてそれらはかなり不十分に文書化/維持されました。統合することで苦しむ前に、ここで試してみようと思いました.... :)
dshipper 2011

2
@dshipper:sourceforge.net/projects/cjsonは、要件を考えると、やや有望に見えます。個人的にはこれらのライブラリを使用したことがないので、お勧めできません。単一のライブラリに関する提案は、とにかく意見であり、決定的な答えではありません:)
Merlyn Morgan-Graham

5
@dshipper:軽量で十分に文書化されているjanssonで良い経験をしました。 digip.org/jansson/doc/2.1
ディートリッヒエップ

1
@ディートリッヒ、dshipper:私はちょうど今ヤンソンを見ました。私はそれが十分に文書化されていて非常に小さく、優れたテストスイートを持っているように見えることに同意します。それはおそらくあなたの要件にも合うでしょう。しかし、おそらく機能するライブラリがいくつかあります。Jsonの依存関係をできる限り抽象化し、いくつかのライブラリを試して、どれが最も悲しみが少ないかを確認することをお勧めします:)
Merlyn Morgan-Graham

それで、@ dshipper、sourceforge.net / projects / cjsonに行きましたか?
Mawgは、2015

37

cJSONにはまともなAPIがあり、小さいです(2ファイル、約700行)。私が最初に見た他のJSONパーサーの多くは巨大でした...私はいくつかのJSONを解析したいだけです。

編集:私たちは年にもわたってcJSONにいくつかの改善加えてきました。


10

Jsmnは非常にミニマルで、使用できる関数は2つだけです。

http://zserge.bitbucket.org/jsmn.html


jsmnの欠点の1つは、Unicodeエスケープシーケンスを処理しないことです。そのソースにあなたが表示されます/* Allows escaped symbol \uXXXX */... case 'u':.../* TODO */
ヒッピー・トレイル

14
また、トークンを提供するだけで、データを理解できるように頑張ってください。それはあなたができる絶対に最小で効率的なことのように見えますが、それも多くはしません。
NateS 2013年

どうやら彼らはUnicode記号の「TODO」を修正したようです。
aviggiano 2016

9

NXJSONは、フル機能でありながら非常に小さい(〜400行のコード)JSONパーサーであり、使いやすいAPIを備えています。


あなたはNXJSONの開発者のようですが、cJSONや他のオプションとの比較についてコメントできますか?
マット

5
単純なことは単純な方法で行われます-これが他のほとんどのパーサーとのNXJSONの主な違いです。cJSONも単純ですが、jsonパーサー以外に、jsonコンストラクターとシリアライザーも含まれています。cJSONはすべての文字列を複製するため、より多くのメモリが必要ですが、NXJSONはすべての操作を実行して、元のコンテンツを破棄します。タスクに応じて、これらの違いは長所または短所と見なすことができます。NXJSONはコメントも処理します。これは、構成ファイルの解析に適しています。
Yaroslav Stavnichiy 2014年

9

あなたはヤンソンを見ることができます

Webサイトには次のように記載されています。Janssonは、JSONデータをエンコード、デコード、および操作するためのCライブラリです。それは特徴です:

  • シンプルで直感的なAPIとデータモデル
  • JSONへのエンコードとJSONからのデコードの両方が可能
  • 包括的なドキュメント
  • 他のライブラリへの依存はありません
  • Unicodeの完全サポート(UTF-8)
  • 広範なテストスイート

1
直接Githubリンク:github.com/akheron/jansson
Ray Hulha 2016

jsmnその速度[1]のために使いたくなりましたが、エンコーディングをサポートしていません。さらに、ヤンソンは本当に使いやすいです。--- [1] translate.google.it/...
マルコ・スッラ

OjCは高速で、エンコーディングをサポートしています。github.com/ohler55/ojc
Peter

Janssonは、CでJSONを解析するための私の行き先です
Kenneth Wilke 2017

8

作業プロジェクトにJSON-Cを使用したので、それをお勧めします。軽量で、オープンライセンスでリリースされます。

ドキュメントはディストリビューションに含まれています。基本的に*_add、JSONオブジェクトを作成する*_put関数、それらのメモリを解放する同等の関数、およびタイプを変換してオブジェクトを文字列表現で出力するユーティリティ関数があります。

ライセンスにより、プロジェクトに含めることができます。このように使用し、JSON-Cをメインビルドにリンクされた静的ライブラリとしてコンパイルしました。そうすれば、依存関係について心配する必要はありません(Xcodeのインストール以外)。

JSON-Cも、OS X(x86 Intel)およびLinux(x86 Intel)で問題なくビルドされました。プロジェクトを移植可能にする必要がある場合、これは良いスタートです。


6

任意のJSON構造を解析する必要がありますか、それともアプリケーションに固有のデータのみを解析する必要がありますか。後者の場合、JSONキーを値にマッピングするハッシュテーブル/マップ構造を生成する必要がないため、はるかに軽量で効率的にすることができます。代わりに、データを構造体フィールドなどに直接保存することができます。


2
これは、Cなどの非動的言語でJSONを使用する場合に非常に重要なポイントです。しかし、これは答えではないため、OPの質問に対するコメントである必要があります。
hippietrail 2013年

創造的思考のための+1!それはどのように機能しますか?これでも、特に軽量のライブラリを利用できませんでしたか?構造フィールドへの解析は、まだかなりの作業のように聞こえます。
CL22 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.