質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

3146閲覧

正しく動作するjsonの構文チェックのnodeモジュールはありますか

Newbie_

総合スコア22

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2018/07/23 01:17

編集2018/07/25 10:01

現在jsonの構文チェックができるnodeモジュールを探しています。モジュールはパッケージ管理ツールnpmで導入しています。

①jsonlint:リンク内容
②json-lint:リンク内容

上記2つを試してみたのですが、①は記載されている方法の

var jsonlint = require("jsonlint"); jsonlint.parse('{"creative?": false}');

を試してみたのですが、どうも2行目のjsonlint.parseが動作していない様子でした。
②は

var JSONLint = require('json-lint'); var lint = JSONLint( json, options );

説明通りに実行すると一応実行はされるのですが、改行コードがCRLFの場合2行分と読みとってしまうという点、またファイルにエラーが存在しなくてもなぜか最終行に対してundefinedのエラーを返してきていました。②は改行コードによって表示行数を正しいものにするようにし、最終行のエラーに関して無視するようにすれば一応動作としては正しいものにはなるとは思いますが...。

もう少しうまく動作するモジュールがあればと思い質問させていただきました。
よろしくお願いいたします。
また私の使用方法がそもそも間違っており、こうすれば正しい結果が得られるという指摘がありましたら、それもありがたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

①jsonlintの場合、jsonlint.parse(); 解析成功はObjectを返します。
例えば以下です。

js

1var jsonlint = require("jsonlint"); 2var json = '{"result":true, "count":42}'; 3var obj = jsonlint.parse(json); // 成功,Objectを返します 4console.log(obj) 5// { result: true, count: 42 } 6 7var badJson = '{"result":true, count:42}'; //有効なJSONでない 8jsonlint.parse(badJson); // 例外をスローします。

②json-lintのnode.js場合、ここはrequire('モジュール名') 修正する。
例えば以下です。

js

1var JSONLint = require('json-lint'); 2var json = '{"result":true, "count":42}'; 3var lint = JSONLint(json); 4 5var badJson = '{"result":true, count:42}'; //有効なJSONでない 6var lint2 = JSONLint(badJson); 7if (lint2.error) { // エラーが発生して,エラーメッセージを表示する 8 console.log(lint2.error, lint2.line, lint2.character); 9} 10// Unknown Character 'c', expecting a string for key statement. 1 17

改行文字列試行です。

js

1 2var jsonlint = require('jsonlint'); 3var JSONLint = require('json-lint'); 4 5// 改行コード(特殊文字)等が入っていたため、エラーが発生していた。 6var str1 = '{"profile": "I love \npizza & coffee!\n"}'; 7// JSON.parse(str1); // エラー 8// jsonlint.parse(str1); // エラー 9// JSONLint(str1); // エラーしない... 10 11var str2 = '{"profile": "I love \npizza & coffee!\n"}'; // "\"はエスケープ処理します。 12// var str2 = JSON.stringify(str1); あるいは、JSON.stringify 処理できます。 13var o = JSON.parse(str2); 14var o2 = jsonlint.parse(str2); 15var o3 = JSONLint(str2); 16console.log(o.profile); 17// "I love 18// pizza & coffee! 19// " 20console.log(o2.profile); 21// "I love 22// pizza & coffee! 23// "

JSON.parseとjsonlintはおすすめです。

投稿2018/07/25 03:16

編集2018/07/26 09:52
ones

総合スコア85

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Newbie_

2018/07/25 10:01 編集

回答ありがとうございます。まだ確認できていないのですが、とりいそぎお礼を。 ②で指摘いただいたモジュール名は記述ミスですので、実際のコード通りに修正いたします。 時間ができ次第確認させていただきます。
Newbie_

2018/07/26 01:12

ご確認が遅れてすみません。①のほうですが、onesさんのおっしゃる通り、例外をスローしていることが確認できました。①を使い場合try-catchで例外を取得してやればいいのですね。 ②のほうは動作そのものはonesさんがおっしゃっている方法で既に確認できていたのですが、質問でも記載したようにerrorとして返される値が微妙におかしいのではないか、ということで記載しておりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問