0

私は非常に大きなJsonファイルを持っています(データセットは30000よりも大きいです)。特定のキーの値の一部が特定の文字列と同じであるかどうかを確認してから、intをインクリメントする必要があります。

これはJsonの一部です:

[
    {
        "geo": null,
        "coordinates": null,
        "in_reply_to_status_id_str": null,
        "contributors": null,
        "in_reply_to_user_id": null,
        "in_reply_to_status_id": null,
        "truncated": false,
        "created_at": "Tue Nov 13 20:17:17 +0000 2012"

キー「created_at」に特定の日(値)があるかどうかを確認したい。たとえば、「火」のように、次にインクリメントします。var tuesday = 0;

私が思いつくことができるのはこの関数だけです:

function getValues(obj, key) {
    var objects = [];
    for (var i in obj) {
        if (!obj.hasOwnProperty(i)) continue;
        if (typeof obj[i] == 'object') {
            objects = objects.concat(getValues(obj[i], key));
        } else if (i == key) {
            objects.push(obj[i]);
        }
    }
    return objects;
}

ただし、キーをチェックして値を配列に入れるだけです。それは私が望むものではありません。

4

2 に答える 2

3

データの構造が何であるかは質問からすぐにはわかりませんが、created_atプロパティにDateが入力されるオブジェクトの配列のように見えます。再帰的である必要がある場合(提供したコードが示唆している)、次のコードを変更する必要があります。しかし、説明から外れます:

キー「created_at」に特定の日(値)があるかどうかを確認したい。たとえば、「火曜日」のように、次にインクリメントします。var tuesday = 0;

次に、配列を次のように取得し、日数のマップと、プロパティが7日間の各文字列で始まるアイテムの数を含むオブジェクトを含むdata変数になります。valuecreated_at

var valMap = {
  Sun: 'sunday',
  Mon: 'monday',
  Tue: 'tuesday',
  Wed: 'wednesday',
  Thu: 'thursday',
  Fri: 'friday',
  Sat: 'saturday'
}

var value = data.reduce(function(m, i, x){
  for (d in valMap){
    if (i.created_at.indexOf(d) === 0){
      m[valMap[d]]++;
      return m;
    }
  }
  return m;
}, {
  sunday: 0,
  monday: 0,
  tuesday: 0,
  wednesday: 0,
  thursday: 0,
  friday: 0,
  saturday: 0
});

結果は次のようになります。

{
  sunday: 0,
  monday: 1,
  tuesday: 3,
  wednesday: 0,
  thursday: 1,
  friday: 0,
  saturday: 6
}
于 2013-01-09T01:37:21.890 に答える
0

キーがオブジェクトのフィールド名に存在するかどうかを確認したい場合は、indexOfを使用してください

 function getValues(obj, key) {
        var objects = [];
        for (var i in obj) {
            if (!obj.hasOwnProperty(i)) continue;
            if (typeof obj[i] == 'object') {
                objects = objects.concat(getValues(obj[i], key));
            } else if (s.indexOf(key) !== -1) {
                objects.push(obj[i]);
            }
        }
        return objects;
    }
于 2013-01-09T01:36:27.833 に答える