2011-12-28 12 views
1

カスタムデータ(データのSencha Touchストアの使用)をJSON形式に変換できるユーティリティ関数を作成しようとしましたが、ほとんど完了しましたが、複雑なデータはTwitter APIシンプルなタイプのデータでも問題ありません。JavaScript JSONへのカスタムデータ配列

カスタムデータ

var items = []; 
for (var i = 0; i < 10; i++) { 
    var item = {}; 

    var data = {}; 
    data.prop1 = "123456789"; 
    data.prop2 = "Some Name"; 
    data.prop3 = "Some Date and Time"; 

    item.data = data; 

    items.push(item); 
} 

次に上記のデータは、ループ内でアクセスすることができ、機能を以下でJSONに変換することができます。

function toJSON(items) { 
    var jsonString = "["; 

    for (var i = 0; i < items.length; i++) { 
     var item = items[i]; 

     jsonString += "{"; 

     for (var propertyName in item.data) { 
      jsonString += '"' + propertyName + '":' + '"' + item.data[propertyName] + '",'; 
     } 

     if (jsonString.substr(jsonString.length - 1, 1) === ",") { 
      jsonString = jsonString.substr(0, jsonString.length - 1); 
     } 

     jsonString += "},"; 
    } 

    if (jsonString.substr(jsonString.length - 1, 1) === ",") { 
     jsonString = jsonString.substr(0, jsonString.length - 1); 
    } 

    jsonString += "]"; 

    return jsonString; 
} 

私はエンコードのことを正しく行っていますか?

あなたはちょうどあなたのお気に入りのJavaScript/AJAXによって提供されるネイティブJSON.stringify()方法、または(ラップ)のバージョンを使用していない理由はいかなる理由があり、リアルタイムでの経験http://jsfiddle.net/WUMTF/http://senchafiddle.com/#gxtZ9

+1

[JSON.js](https://github.com/douglascrockford/JSON-js)を使用しないのはなぜですか? –

+2

意図的に出力からデータプロパティを外していますか?あなたの出力は 'JSON.stringify'(現代のブラウザに組み込まれているもの)が、各項目の' data'属性の欠如を除いてあなたに与えるものと同じです。故意にそれを放棄している場合は、データをマッサージするのが簡単であると主張したいと思います。JSON.stringifyまたはJSON JSの多くのライブラリの1つを使用してください。 –

+0

私はデータを制御することはできず、常に深いレベルに過ぎません。 – Neutralizer

答えて

1

を取得するために、これらのフィドルを見ることができますとしょうかん?彼らはより堅牢で、テストされ、安全で、優れたパフォーマンスを発揮します。

toJSONtoJSONお客様のtoJSON実装は、単純なテストデータでは機能している可能性がありますが、多くの理由でより複雑なタイプのデータでは失敗する可能性がありますが、ほとんどの場合、ほとんどの場合どんなタイプのネスティングも説明できないため、大幅に増加します。最上位レベルは常に配列であり、配列内の各要素は1レベル深いプロパティしか持たないと仮定します。 https://github.com/douglascrockford/JSON-js/blob/master/json.jsをご覧ください。これは、JSONの "父"であるDouglas Crockfordが提供する実装です。有効な実装にはほとんどすべてが必要です。残念ながら、短時間(簡単にコピー&ペースト)でこれを簡単かつ簡単に再現できると思えば、オッズはあなたに反するものです。

+0

あなたはjsfiddleで応答を見たのですが、これはエンコード時に私が興味を持っている応答です。 JSONはその応答の権利をエンコードしませんか? – Neutralizer

+0

私は上記でシミュレートしたカスタムデータを制御できません。 – Neutralizer

+0

@UmairAshraf - あなたの質問(上記)へのMattのコメントを参照してください。さらに、あなたのjsFiddleの私のフォークを見てください:http://jsfiddle.net/rUQ78/1/。 Mattの提案 - 入力データをマッサージするかJSON.stringifyを呼び出した後に出力するかのどちらかをマッサージしますが、実証済みの必要がない限りはJSON変換を自分で再作成しないでください(ほとんどありません)。 – ziesemer

関連する問題