2017-09-23 6 views
0

私は趣味のプロジェクトとして取り組んでいるペット採用サイトのjsonオブジェクトを構築して読む方法を学ぶだけです。ドット表記で作成されたJSONオブジェクトからのテキストにアクセス

var userData = {}; 
userData['dogs'] = {}; 
userData.dogs['Spot'] = {}; 
userData.dogs.Spot['color'] = 'black'; 
userData.dogs.Spot['weight'] = '24lbs'; 
userData.dogs.Spot['location'] = 'Washington'; 
userData.dogs.Spot['comments'] = 'this is a long string of text'; 

私は、これを文字列化して保存し、それを取得し、それを解析する方法を考え出したが、私は情報の個々の部分にアクセスする方法を見つけ出すことはできません(重量:友人が私はこのようなものを構築提案しました例えば)。これは、userDataからuserData.dogs、userData.dogs.spotまでのドットでこのようなオブジェクトを構築するのが標準ですか?そして、どのように各プロパティにアクセスするのですか?

+1

を使用する方法https://jsbin.com/lagexubife/edit?js,console

をしましたあなたは悪いスタートg点。強くお勧め:[access-process-nested-objects-arrays-or-json](https://stackoverflow.com/questions/11922383/access-process-nested-objects-arrays-or-json) – charlietfl

答えて

1
  1. JSONは宣言リテラルであるのに対し、それは、(すなわち、プログラムを)反復ステップを使用しているためいいえ、そのようなオブジェクトを構築するために標準ではありませんが(覚えている:J AVA S cript Object N otation)。

    userData = { 
        "dogs": { 
         "Spot": { 
          "color": "black", 
          "weight": "241lbs", 
          "location": "Washington", 
          "comments": "this is a big dog, 241lbs, wow" 
         } 
        } 
    }; 
    

    「純粋な」JSONには、二重引用符で区切られたキーが必要です。スクリプト内のオブジェクトリテラルでは、引用符のない標準の識別子を使用できます。

  2. ドット付き表記を使用してアクセスできます。オブジェクトにJavaScript識別子の制限に準拠していないキーがある場合(例:スペースや句読点はなく、文字で始める必要があります)、文字列インデクサーのプロパティ構文を使用する必要があります:

    console.log dogs.Spot.color); console.log(userData.dogs.Spot.comments);あなたは何をすべきか

+1

[_this大型犬、241lbs、wow_](https://i.imgflip.com/mkk6r.jpg) –

+0

ありがとう、それはそれが繰り返しそれを構築していたことを理解するのに役立ちます。 – HughP

-3

を私は関数にsetDeep友達が与えた

var obj = {} // object to mutate 
setDeep(obj, 'dogs.Spot.comments', 'this is a long string of text') 
console.log(obj.dogs.Spot.comments) 

コード

var setDeep = function(data, keys, val, options){ 
    if(typeof keys === 'string' && !Array.isArray(keys)) 
     keys = String(keys); 
    if(typeof keys === 'string') 
     keys = keys.split('.'); 
    if(!Array.isArray(keys)) 
     return data; 
    options    = options || {}; 
    const strict  = !!options.strict; 
    const last_index = keys.length - 1; 
    var value   = data; 
    var l    = keys.length; 
    if(!strict && !value) 
     value = {}; 
    for(let i=0; i < l; i++){ 
     let key   = keys[i]; 
     if(i < last_index){ 
      if(typeof value[key] === "undefined" || value[key] === null){ 
       if(strict){ 
        // force throw error 
        value[key][keys[i+1]] = {}; 
       }else{ 
        value[key] = {}; 
       } 
      } 
     }else{ 
      if(i === last_index){ 
       value[key] = val; 
       break; 
      } 
     } 
     value = value[key]; 
    } 
    return data; 
} 
+0

私は実際にオブジェクトの初期化にこの怪物が必要だとは思わない。これは標準のJSONアプローチに比べてどのような利点がありますか? –

+0

どのようにして既存のオブジェクトを深く変異させることができますか?それぞれのプロパティレベルを「未定義」に手動でチェックしますか? – Firanolfind

+1

これは簡単な家庭用懐中電灯を必要とする問題を解決するのに役立つカスタムレーザーを構築するようなものです – charlietfl

関連する問題