1

私は JavaScript についてあまり詳しくありませんが、私がやろうとしていることの概要を以下に示します。

外部ソースによって準備された JSON オブジェクトがあります。そのオブジェクトをそのまま使用して、準備した別の JSON オブジェクトに文字列を付けていますが、問題は、各キーの前に名前空間の省略形が必要なことです。

これは私が持っているものです:

obj1 = {
  "key1": "value",
  "key2": "value",
  "key3": "value",
  "key4": {
   "subkey1": "value",
   "subkey2": "value"
  }
}

そして、私はそれを何に変えたいですか:

obj1 = {
  "ns:key1": "value",
  "ns:key2": "value",
  "ns:key3": "value",
  "ns:key4": {
   "ns:subkey1": "value",
   "ns:subkey2": "value"
  }
}

これは、同じプロジェクトのいくつかの異なる側面に使用されるため、動的に行う必要があります。だから私は単に「obj1」を渡す関数を持ち、何を与えても、変換された JSON オブジェクトを吐き出すことを望んでいます。

これを行う最も簡単な方法は何ですか?繰り返しますが、私は JavaScript に慣れていないので、例を歓迎します。

PS。CoffeeScript ソリューションも使用できます。私は基本的にJSで書いてから、js2coffee.orgを使って変換しています。

4

1 に答える 1

4

コードをチェックして、未処理のケースを見逃していないかどうかを確認してください。使用する前に、いくつかのことを確認する必要があると思います...

var obj1 = {
  "key1": "value",
  "key2": "value",
  "key3": "value",
  "key4": {
   "subkey1": "value",
   "subkey2": "value"
  }
};

var rename = function(obj, prefix){

    if(typeof obj !== 'object' || !obj){
        return false;    // check the obj argument somehow
    }

    var keys = Object.keys(obj),
        keysLen = keys.length,
        prefix = prefix || '';

    for(var i=0; i<keysLen ;i++){

        obj[prefix+keys[i]] = obj[keys[i]];
        if(typeof obj[keys[i]]=== 'object'){
            rename(obj[prefix+keys[i]],prefix);
        }
        delete obj[keys[i]];
    }

    return obj;
};
于 2013-06-19T20:03:00.233 に答える