1

Javascript のおかげで、行番号付きのテキストエリアで構成されるフォームがあります。jsonlint.org と同じように、このフォームを使用して JSON を検証します。ユーザーが JSON を入力し、検証を押すと、回答が返されます。私は自分でファイルを解析していません.pythonコマンドを使用しています:

python -m json.tool input.json

ご覧のとおり、このコマンドはファイルを受け取ります。だから私がやっていることは次のとおりです:

  • フォームデータをファイルに書き込む
  • このコマンドを実行して出力を取得します
  • エラーがない場合は、jsonlint.org のように「有効な JSON」を画面に出力します。それ以外の場合は、プログラムによって与えられたエラー メッセージを表示します。「エラー .... 行 x 列 y (文字 z)」

Python プログラムによって指定された行番号は、ファイル内の行番号に対応し、textarea の行番号には対応していません。Javascript の行番号が役に立たなくなります。テキストエリアの幅とその中で使用しているフォントに依存し、ファイル内の行番号がどのように設定されているかを理解すること(私は本当に理解していません)

2 の間の通信をどのように見つけることができますか?

ありがとう

ただ気づいたこと:私のテキストエリアは、SOFで質問するときに入力したものとまったく同じに見えます:D

----- ベンへの応答として編集 ----- 非常に興味深い。「wrap」というテキストエリアのオプションを使用して、私が求めた機能を実装しました。「ソフト」に設定しました:

<form method='post' action='/exec' id="jsonform" >
       <textarea wrap="hard" name="json" id="json_input" rows="20" cols="150" placeholder="Enter JSON to validate.">{{ resp | safe }}</textarea>
       <div align="center">
       <input type='submit' value='Validate' id="button" >
       </div>
    </form>

ただし、これにより有効な JSON が無効になります。Pythonモジュールは区切り線の前に引用符があることを期待しているため...したがって、 textarea="soft" を使用してフォームからのデータをバリデーターにフィードし、 textarea="hard" を使用してフォームからのデータを表示する必要があります。しかし、私には1つのフォームがあります。また、あなたがくれた投稿に記載されているコードを試しましたが、何らかの理由で機能しませんでした。そして、私はJavascriptを知らないので(それを変更する必要があります)、コードをデバッグしたり適応させたりすることができませんでした... HELLLP

4

1 に答える 1

1

事後に行を導出しようとする代わりに、テストするデータを送信する前にマーカーを挿入する方がよいでしょう。 ARABIC テキストのワードラップであるテキストエリアで「改行」を見つけるすべての改行で改行を強制するためのかなり堅牢な手法があるようです。テキストエリアで使用される改行とファイルで使用されるリーエン ブレークが同じでない場合でも、転送中に一方から他方への変換が比較的簡単であることがわかるはずです。無効に戻った場合に改行を追加せずにユーザーが編集できるようにしたいので、混乱させたくない場合は、テキストエリアを「display:none」内のスペースに複製することをお勧めします" div または同等のセットアップ。必要に応じてクローンをマングルしてテストし、手つかずの目に見えるオリジナルにフィードバックを置きます。ファイルに autowrap 幅がある場合は、テキストエリアの autowrap 幅が短いことを確認する必要がありますが、それは難しいことではありません。 .

編集: python モジュールが区切り線の前に引用符を持たなければならない場合、とにかく少し問題があります - Enter キーを押すだけで、いつでも誰でも手動でハード区切り線を入れることができます。私の提案は、Json とファイルの間に何らかのプロセッサ関数を配置して、改行の直前に適切な引用符を配置することです。ただし、ここで少し誤解している可能性があります。

ただし、フォームの複数のコピーで遊ぶ必要がある場合は、それは完全に実行可能です. jQuery を使用する必要がありますが、とにかく jQuery は学ぶ価値があります。(理解するまでは多少イライラしますが、理解した後は、javascript にこれまでに起こった中で最高のものであり、それなしではいられないでしょう。) jQuery の最新のコピーを含めます(これは javascript プラグインです)。 )。このclone()関数を使用すると、クローン作成時に既存のテキストエリア (またはフォーム、またはその他の DOM オブジェクト) の正確な複製を作成できます (つまり、すべてのテキストが書き込まれます)。insertBefore()and/or関数を使用insertAfter()すると、ページ内の任意の場所に配置できます。おそらく a 内に<div style="display:none"></div>配置できるため、画面に表示されていることを何もせずに、好きなだけいじることができます。

于 2012-06-14T15:57:15.870 に答える