我需要从Javascript中的JSON结构中检索信息 我先做了这个:
<script type="text/javascript">
var jsonfile= '{"products":
{"productInfo1": "test",
"productInfo2": "test" }
}';
var digitalData = JSON.parse(jsonfile);
console.log(digtialData.products.productInfo1);
console.log(digtialData.products.productInfo2);
</script>
我在控制台窗口中输出“test”。这很好。但似乎我需要声明新对象,以便正确使用。据我了解,他们不喜欢这个解决方案。上述方法很糟糕 。 所以我尝试创建一个新脚本。
<script type="text/javascript">
var digitalData = new digitalData();
var product = new digitalData.product();
var productInfo1 = new digitalData.product.productInfo1();
var productInfo1 = new digitalData.product.productInfo2();
productInfo1 = "test";
productInfo2 = "test";
console.debug(digitalData.product.productInfo);
console.debug(digitalData.product.productInfo);
</script>
然后我收到错误:"Uncaught TypeError: undefined is not a function index.php? route=product/product&path=57&product_id=49:265
(anonymous function)"
我尝试了各种各样的变种,并滥用谷歌找到答案如何让这项工作。我找到了一些答案,比如让digitalData.product正常工作。但我希望第三个对象正常工作,并以任何方式将其链接到1/2对象(digitalData和product)。
任何人都有建议如何解决这个问题?
答案 0 :(得分:1)
首先,javascript中的新关键字仅适用于function
s。如果你这样做:
var digitalData = new digitalData();
这意味着您的代码中有一个函数,并且您希望基于该函数创建一个对象。
其次,您可以像这样在对象中获取所有内部对象:
digtialData.products
digtialData["products"]
其余的:
digtialData.products.productInfo1
digtialData["products"].productInfo1
digtialData["products"]["productInfo1"]
您还可以创建类似函数的类,如:
DigitalData = function DigitalData(){
this.products = [];
};
DigitalData.prototype.addProduct = function(info1, info2){
var product = new DigitalData.Product();
product.productInfo1 = info1;
product.productInfo2 = info2;
this.products.push(product);
};
DigitalData.Product = function Product(info1, info2){
this.productInfo1 = info1;
this.productInfo2 = info2;
};
var digitalData = new DigitalData();
digitalData.addProduct("test1", "test2");
digitalData.addProduct("test11", "test22");
var jsonString = JSON.stringify(digitalData);
console.log(jsonString);
答案 1 :(得分:1)
试试这个
var digitalData = new Object();
var products = new Object();
products.productInfo1 = "test";
products.productInfo2 = "test";
digitalData.products = products;
console.debug(digitalData.products.productInfo1);
console.debug(digitalData.products.productInfo2);
答案 2 :(得分:1)
不太确定为什么第一种方法出现问题。但是要使用第二种方法,您需要先定义对象,然后才能使用new
function DigitalData() {
}
var digitalData = new DigitalData();
然后对product
你可以这样做:
function Product() {
}
digitalData.product = new Product();
但是在DigitalData
的构造函数中实际实例化它可能更容易,因为否则,构造函数的重点是什么?
function DigitalData() {
var self = this;
self.product = new Product();
}
var digitalData = new DigitalData();
var product = digitalData.product;
现在productInfo1
和2部分听起来应该是一个数组。所以你可以这样做:
function ProductInfo(name) {
var self = this;
self.name = name;
}
function Product(arrayofNames) {
var self = this;
self.productInfo = arrayofNames.map(function(n) { new ProductInfo(n); });
}
function DigitalData(arrayofNames) {
var self = this;
self.product = new Product(arrayOfNames);
}
var digitalData = new DigitalData({ "product1","product2" });
console.log(digitalData.product.productInfo[0].name); // logs "product1"
但是如果你不想使用数组,那么:
function Product() {
var self = this;
self.productInfo1 = new ProductInfo();
self.productInfo2 = new ProductInfo();
}