Javascript 使用非固定格式处理JSON数据

Javascript 使用非固定格式处理JSON数据,javascript,jquery,json,Javascript,Jquery,Json,通常在使用JSON时,您会得到一个具有已知和指定格式的JSON对象。因此,例如,如果我们在一个列出电影标题和分级的网站上工作,那么您有如下JSON数据: { { "title": "Inception", "rating": 4 }, { "title": "The Dark Knight", "rating": 5 }, etc... } 在Javascript中,通过执行以下操作可以轻松

通常在使用JSON时,您会得到一个具有已知和指定格式的JSON对象。因此,例如,如果我们在一个列出电影标题和分级的网站上工作,那么您有如下JSON数据:

{
    {
        "title": "Inception",
        "rating": 4
    },
    {
        "title": "The Dark Knight",
        "rating": 5
    },
    etc...
}
在Javascript中,通过执行以下操作可以轻松循环此JSON:

for (let i = 0; i < movies.length; i++) {
    console.log('The title: ' + movies[i][0]);
    console.log('The rating: ' + movies[i][1]);
}
for(设i=0;i
但是,如果您得到一个JSON对象,而该对象没有像上面那样的预定义格式,该怎么办呢。示例中的JSON由多个对象组成,这些对象都有两个属性,即title和rating。因为结构/格式是已知的,所以很容易相应地循环使用它。但是,当单个JS代码必须循环使用没有预定义格式的JSON时,我怎么知道如何循环使用它呢?例如,如果用户可以在对象中放置无限的对象,而我的代码不知道它与之有什么关系,该怎么办

我试图制作一个简单的应用程序,将JSON转换为HTML。有了HTML(类似于XML),作为一名开发人员,您可以选择要将多少元素放入彼此的内部。不同的标记有完全不同的格式,有些人嵌套了很多元素,而另一些人不使用很多嵌套元素,等等。我如何处理与HMTL解析器处理相同的事情,但使用JSON

我尝试过从一开始就写一点代码,但当我意识到代码必须能够处理任何格式时,我就陷入了困境


我需要实现什么样的逻辑才能理解这一点?我不是要一段代码来帮我解决所有这些问题,但我想知道人们是如何处理这样的问题的,以及可以使用什么样的技巧来实现这一点。

您可以简单地使用
Object.keys
函数。它是对象中键的返回数组。然后循环抛出这个数组

您可以将
用于。。在

例如:

让用户={
姓名:“我”,
年龄:100,,
网站:“http://stackoverflow.com"
};
用于(输入用户){
console.log(键“”,用户[键])

}
您只需使用
Object.keys
功能即可。它是对象中键的返回数组。然后循环抛出这个数组

您可以将
用于。。在

例如:

让用户={
姓名:“我”,
年龄:100,,
网站:“http://stackoverflow.com"
};
用于(输入用户){
console.log(键“”,用户[键])

}
您需要编写一些递归逻辑,知道如何处理可以传递到其中的每种数据类型。让我们将其分为两类:对象和非对象


如果解析器遇到的数据类型是非对象(即数字、字符串、数组等),那么您大概知道如何处理它。如果解析器遇到一个对象,那么应该再次触发函数的启动(在其当前执行中)。这似乎是一个冗长且可能会影响性能的选项,但我认为没有其他方法可以深入到任意多个JSON数据层。

您需要编写一些递归逻辑,知道如何处理可以传递到其中的每种数据类型。让我们将其分为两类:对象和非对象


如果解析器遇到的数据类型是非对象(即数字、字符串、数组等),那么您大概知道如何处理它。如果解析器遇到一个对象,那么应该再次触发函数的启动(在其当前执行中)。这似乎是一个冗长且可能会影响性能的选项,但我认为没有其他方法可以深入到任意多个JSON数据层中。

您所说的是JSON格式的吗?如果您尝试执行以下操作,你可能想看看它。你需要对它进行深度优先搜索,它将从作为父对象的json对象开始,并将遍历其中的所有节点。你说的是json格式的?如果你尝试执行以下操作,您可能想看看它。您需要对它进行深度优先搜索,它将从您作为父对象的json对象开始,并将遍历其中的所有节点。这不是一个完整的解决方案,因为它只处理一种数据类型,并且不是递归的。这当然是一个难题,但不是问题的完整答案。这不是一个完整的解决方案,因为它只处理一种数据类型,并且不是递归的。这肯定是谜题的一部分,但不是问题的完整答案。