jquery 如何创建json对象

2skhul33  于 2023-10-17  发布在  jQuery
关注(0)|答案(2)|浏览(107)

我有下面的json对象,并尝试使用jQuery每次迭代,但它只返回一次迭代。我做错了什么?

var data = "{
  "SIEcat4": {
    "3001": {
      "test": "test",
      "test": "test"
    },
    "3300": {
      "test": "test",
      "test": "test"
    }
  },
  "SIEcat5": {},
  "SIEcat6": {},
  "SIEcat13": {
    "3990": {
      "test": "test",
      "test": "test"
    }
  }
}"



$(JSON.parse(data)).each(function(key, value) {
  console.log("test");
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
zpjtge22

zpjtge221#

详细阐述我的评论
$jQueryCollection.each()通常用于jQuery集合-我不会将其用于嵌套对象
$.each可用于对象,但只能用于一个图层
同样,你有相同的引号 Package 对象和引用数据。只有在template literal中的JS中或者在转义换行符时才允许使用换行符。因此,将外部"更改为`(bactick),
find how to iterate nested object
最后,你的对象是无效的,因为它有多个相同的键。
下面是一个有效对象上的递归迭代器--如果你坚持的话,它可以在jQuery中使用

const obj = JSON.parse(data);
const iterateObject = (obj, parentKey = '') => {
  for (let key in obj) {
    if (typeof obj[key] === 'object') {
      iterateObject(obj[key], `${parentKey}${key}.`);
    } else {
      console.log(`${parentKey}${key}: ${obj[key]}`);
    }
  }
};

iterateObject(obj);

console.log('\n------\n');

// jQuery .each also needs the iterator
let parentKey = '';
$.each(obj, function(key, value) {
  if (typeof obj[key] === 'object') {
    iterateObject(obj[key], `${parentKey}${key}.`);
  } else {
    console.log(`${parentKey}${key}: ${obj[key]}`);
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>

<script>
  var data = `{
  "SIEcat4": {
    "3001": {
      "test1": "test",
      "test2": "test"
    },
    "3300": {
      "test1": "test",
      "test2": "test"
    }
  },
  "SIEcat5": {},
  "SIEcat6": {},
  "SIEcat13": {
    "3990": {
      "test1": "test",
      "test2": "test"
    }
  }
}`; 
</script>
siotufzp

siotufzp2#

在你的问题中,你的JSON对象被 Package 在一个字符串中,这是不正确的。如果你有一个对象的字符串表示,你必须把它作为一个单独的步骤来解析。如果你有一个真实的JSON对象,那么你可以使用Object.keys来覆盖该对象的键。
另外,jQuery在这方面根本不需要。
下面是如何循环对象中的键和数据

var data = {
  "SIEcat4": {
      "3001": {
          "test": "test",
          "test": "test"
      },
      "3300": {
          "test": "test",
          "test": "test"
      }
  },
  "SIEcat5": {},
  "SIEcat6": {},
  "SIEcat13": {
    "3990": {
        "test": "test",
        "test": "test"
    }
  }
};

Object.keys(data).forEach(key => {
  console.log(key, '=>', data[key]);
});

如果你的数据是JSON数据的字符串表示,你可以做与上面完全相同的事情,但是你需要首先运行JSON.parse来从字符串中获取数据。

var dataAsString = `{
  "SIEcat4": {
      "3001": {
          "test": "test",
          "test": "test"
      },
      "3300": {
          "test": "test",
          "test": "test"
      }
  },
  "SIEcat5": {},
  "SIEcat6": {},
  "SIEcat13": {
    "3990": {
        "test": "test",
        "test": "test"
    }
  }
}`;

var data = JSON.parse(dataAsString);

Object.keys(data).forEach(key => {
  console.log(key, '=>', data[key]);
});

相关问题