JavaScriptのデータフォーマット/かわいいプリンター
-
02-07-2019 - |
質問
ようにしている方 pretty print
JavaScriptのデータ構造は人間が読める形式のためのデバッグしやすくなります。
私はかなり大きく複雑なデータ構造の保JSいを書く必要がある一部のコードを操作します。るためにどのような動作するように、いくつかは、私は間違っているのは、私が本当に必要なことは見ることができ、データ構造の全面更新している場合いの変化を通じて、ポートします。
すべてのものまで対応できます自分らしをダンプJavaScriptのデータ構造についての、人間が読む文字列です。JSONいがいきがちですが、もっとニーズにもフォント、インデント.私は、通常、開いているのがfirebugの優れたDOMダンピングもこなっぽい大人な雰囲気を見ることができ、全体を一度にするように見えませんが可能であることを開いているのがfirebug.
あらゆる提案を歓迎する。
よろしくお願いします。
解決
って機能をカンター-グループに属するカンJSオブジェクトが読める形式は、出力なインデントもなくることができたことを付記する。:明けまして御目出とう御座いますから私の作のためのユーザであるかに複雑になる取り扱いこのインデント問題です。
こちらは"単純な"バージョン:
function DumpObject(obj)
{
var od = new Object;
var result = "";
var len = 0;
for (var property in obj)
{
var value = obj[property];
if (typeof value == 'string')
value = "'" + value + "'";
else if (typeof value == 'object')
{
if (value instanceof Array)
{
value = "[ " + value + " ]";
}
else
{
var ood = DumpObject(value);
value = "{ " + ood.dump + " }";
}
}
result += "'" + property + "' : " + value + ", ";
len++;
}
od.dump = result.replace(/, $/, "");
od.len = len;
return od;
}
について見ていく向上します。
注1:ご利用い、 od = DumpObject(something)
利用od.ダンプ肥大化したかったのではlenの値も数)のための他の目的です。では自明であるが、関数の戻り値のみの文字列になります。
注2:な取扱いループに参照です。
編集
また、インデントバージョン。
function DumpObjectIndented(obj, indent)
{
var result = "";
if (indent == null) indent = "";
for (var property in obj)
{
var value = obj[property];
if (typeof value == 'string')
value = "'" + value + "'";
else if (typeof value == 'object')
{
if (value instanceof Array)
{
// Just let JS convert the Array to a string!
value = "[ " + value + " ]";
}
else
{
// Recursive dump
// (replace " " by "\t" or something else if you prefer)
var od = DumpObjectIndented(value, indent + " ");
// If you like { on the same line as the key
//value = "{\n" + od + "\n" + indent + "}";
// If you prefer { and } to be aligned
value = "\n" + indent + "{\n" + od + "\n" + indent + "}";
}
}
result += indent + "'" + property + "' : " + value + ",\n";
}
return result.replace(/,\n$/, "");
}
を選択インデントのラインの再帰呼出し、ブレーススタイルの切り替えによるコラ本です。
...まだホイップアップ版である。また選択することになる。
他のヒント
使用 CrockfordのJSON.stringify このように:
var myArray = ['e', {pluribus: 'unum'}];
var text = JSON.stringify(myArray, null, '\t'); //you can specify a number instead of '\t' and that many spaces will be used for indentation...
変数 text
のようになります:
[
"e",
{
"pluribus": "unum"
}
]
ちなみに、こであっても必要なことJSファイルではライブラリー他
には以下のようなものを使います
<pre id="dump"></pre>
<script>
var dump = JSON.stringify(sampleJsonObject, null, 4);
$('#dump').html(dump)
</script>
に Firebug
, 場合、あなただけ console.debug ("%o", my_object)
クリックすることができます、コンソールを入力双方向オブジェクト以下のように変更しました。このオブジェクト、展開をサポートしていますの子オブジェクト。
をお探しの方に、素晴らし方を見るオブジェクト チェックprettyPrint.js
テーブルを作成すると設定可能なビューのオプションに印刷するかのごdoc.うに console
.
var tbl = prettyPrint( myObject, { /* options such as maxDepth, etc. */ });
document.body.appendChild(tbl);
私のプログラミング Rhino
とん満足しているので答えが掲載していますもっ写プリンタ
function pp(object, depth, embedded) {
typeof(depth) == "number" || (depth = 0)
typeof(embedded) == "boolean" || (embedded = false)
var newline = false
var spacer = function(depth) { var spaces = ""; for (var i=0;i<depth;i++) { spaces += " "}; return spaces }
var pretty = ""
if ( typeof(object) == "undefined" ) { pretty += "undefined" }
else if ( typeof(object) == "boolean" ||
typeof(object) == "number" ) { pretty += object.toString() }
else if ( typeof(object) == "string" ) { pretty += "\"" + object + "\"" }
else if ( object == null) { pretty += "null" }
else if ( object instanceof(Array) ) {
if ( object.length > 0 ) {
if (embedded) { newline = true }
var content = ""
for each (var item in object) { content += pp(item, depth+1) + ",\n" + spacer(depth+1) }
content = content.replace(/,\n\s*$/, "").replace(/^\s*/,"")
pretty += "[ " + content + "\n" + spacer(depth) + "]"
} else { pretty += "[]" }
}
else if (typeof(object) == "object") {
if ( Object.keys(object).length > 0 ){
if (embedded) { newline = true }
var content = ""
for (var key in object) {
content += spacer(depth + 1) + key.toString() + ": " + pp(object[key], depth+2, true) + ",\n"
}
content = content.replace(/,\n\s*$/, "").replace(/^\s*/,"")
pretty += "{ " + content + "\n" + spacer(depth) + "}"
} else { pretty += "{}"}
}
else { pretty += object.toString() }
return ((newline ? "\n" + spacer(depth) : "") + pretty)
}
の出力は以下のようなものです:
js> pp({foo:"bar", baz: 1})
{ foo: "bar",
baz: 1
}
js> var taco
js> pp({foo:"bar", baz: [1,"taco",{"blarg": "moo", "mine": "craft"}, null, taco, {}], bleep: {a:null, b:taco, c: []}})
{ foo: "bar",
baz:
[ 1,
"taco",
{ blarg: "moo",
mine: "craft"
},
null,
undefined,
{}
],
bleep:
{ a: null,
b: undefined,
c: []
}
}
私も掲載していますので Gistこちら 何の変化が必要になる場合があります。
jsDump
jsDump.parse([
window,
document,
{ a : 5, '1' : 'foo' },
/^[ab]+$/g,
new RegExp('x(.*?)z','ig'),
alert,
function fn( x, y, z ){
return x + y;
},
true,
undefined,
null,
new Date(),
document.body,
document.getElementById('links')
])
となり
[
[Window],
[Document],
{
"1": "foo",
"a": 5
},
/^[ab]+$/g,
/x(.*?)z/gi,
function alert( a ){
[code]
},
function fn( a, b, c ){
[code]
},
true,
undefined,
null,
"Fri Feb 19 2010 00:49:45 GMT+0300 (MSK)",
<body id="body" class="node"></body>,
<div id="links">
]
QUnit (ユニット-テスティングフレームワークを使用するjQuery)若干のパッチ版jsDump.
JSON.stringify()がない最高の選択場合があります。
JSON.stringify({f:function(){}}) // "{}"
JSON.stringify(document.body) // TypeError: Converting circular structure to JSON
をPhiLhoのリンもとても感謝:))した結果、書き、自分のしていないのになかなか描いうございました。最後にこれからのラフな仕事をします。ご査の結果、優秀と認められるご提案します。
な輝かしいコードは、私がそのような、お久しぶりです、どらすこです。誰かが見つのに役立ちます:
// Usage: dump(object)
function dump(object, pad){
var indent = '\t'
if (!pad) pad = ''
var out = ''
if (object.constructor == Array){
out += '[\n'
for (var i=0; i<object.length; i++){
out += pad + indent + dump(object[i], pad + indent) + '\n'
}
out += pad + ']'
}else if (object.constructor == Object){
out += '{\n'
for (var i in object){
out += pad + indent + i + ': ' + dump(object[i], pad + indent) + '\n'
}
out += pad + '}'
}else{
out += object
}
return out
}
こんのコメントがジェイソンジの"利用CrockfordのJSON.stringify"がる事が出来なかったコメントを追加することの答えです。
としてのコメント、JSON.stringifyいなくなってしまったことは、我々の試作(www.prototypejs.org)図書館があります。ってきてくれますから、それほど容易になくなってしまったことは、我々により一時的に除去の配列になります。試作品です。toJSON方法と試作を追加し、Crockfordのstringify()、背中のようになります:
var temp = Array.prototype.toJSON;
delete Array.prototype.toJSON;
$('result').value += JSON.stringify(profile_base, null, 2);
Array.prototype.toJSON = temp;
思J.Buntings応答をJSON.stringify良かったです。しか利用できるJSON.stringifyよYUIs JSONオブジェクトせてもらう良い機会になりそうだをゆい.私の場合は必要dump HTMLいやすくなりましたかユー/切り取り/貼り付けPhiLhoに応じます。
function dumpObject(obj, indent)
{
var CR = "<br />", SPC = " ", result = "";
if (indent == null) indent = "";
for (var property in obj)
{
var value = obj[property];
if (typeof value == 'string')
{
value = "'" + value + "'";
}
else if (typeof value == 'object')
{
if (value instanceof Array)
{
// Just let JS convert the Array to a string!
value = "[ " + value + " ]";
}
else
{
var od = dumpObject(value, indent + SPC);
value = CR + indent + "{" + CR + od + CR + indent + "}";
}
}
result += indent + "'" + property + "' : " + value + "," + CR;
}
return result;
}
単一のための印刷要素を文字列として:
var s = "";
var len = array.length;
var lenMinus1 = len - 1
for (var i = 0; i < len; i++) {
s += array[i];
if(i < lenMinus1) {
s += ", ";
}
}
alert(s);
私 NeatJSON 図書館はRuby-コンテンツビジネス JavaScriptのバージョン.で自由にご利用下(確認)MITライセンスです。眺望できるオンラインデモ/コンバータ:
http://phrogz.net/JS/neatjson/neatjson.html
一部の機能(オプション)
- ラップは、特定の幅場合にはオブジェクトの配列をラインで保管されている。
- Alignのコロンのすべてのキーオブジェクトです。
- ソートキーのオブジェクトへのアルファベット順とする。
- 形式浮動小数点数には特定小数点以下の桁数.
- 時の包装は、"短期バージョンの開閉カッコのための配列やオブジェクトと同じ行の最初または最後の値です。
- を制御する空白文字用イドで配列やオブジェクトを粒状に内側ブラケット、前後にコロンとカンマ).
- 作品のウェブブラウザとしてNode.js モジュールです。
flexjson 含まれprettyPrint()関数が使えます。