Javascript 将JSON转换为具有自定义键和值的对象数组

Javascript 将JSON转换为具有自定义键和值的对象数组,javascript,Javascript,我从服务器收到一个JSON字符串: {0:[“aNumber”、“aText”、“anID”],1:[“aNumber”、“aText”、“anID”]… 我必须详细说明此字符串,以便: 一个成员与客户端字符串连接(例如,它变成“http://www.myurl.com/aNumber.jpg” aNumber成为对象数组中url的值 aText成为同一数组中标题的值 anID成为同一数组中id的值 [{url:]http://www.myurl.com/aNumber.jpg,标题:“aTex

我从服务器收到一个JSON字符串:

{0:[“aNumber”、“aText”、“anID”],1:[“aNumber”、“aText”、“anID”]…

我必须详细说明此字符串,以便:

  • 一个成员与客户端字符串连接(例如,它变成“http://www.myurl.com/aNumber.jpg”
  • aNumber成为对象数组中url的值
  • aText成为同一数组中标题的值
  • anID成为同一数组中id的值

    [{url:]http://www.myurl.com/aNumber.jpg,标题:“aText”,id:“anID}.{url:http://www.myurl.com/aNumber.jpg,标题:“aText”,id:“anID”}


  • 我完全知道如何做到这一点,但我想知道是否有人知道是否可以避免循环:JSON非常庞大(超过10000项)在移动环境中,所以我希望通过一些神奇的东西来提高性能。

    尝试在移动环境中循环10000项。然后尝试100000项,然后尝试1000000项。你可能会发现循环不是最大的性能瓶颈。

    尝试在移动环境中循环10000项。然后尝试100000项,然后尝试1000,0项00.您可能会发现循环并不是最大的性能瓶颈。

    您不能真正做到这一点,这里最好的解决方案是仅在需要时转换对象中的一个特定子数组

    无论如何,循环执行的时间并不长,最长的是解析JSON字符串>对象

    对于您的循环,我会制作如下内容:

    obj=JSON.parse({0:["aNumber","aText","anID"],1:["aNumber","aText","anID"]});
    arr=[];
    for(i in obj){
      o=obj[i]; // improve performances on big objects
      arr.push({url: "http://www.myurl.com/"+ o[0] + ".jpg", caption:o[1], id:o[2]});
    }
    

    您不能真正做到这一点,这里最好的解决方案是仅在需要时转换对象中的一个特定子数组

    无论如何,循环执行的时间并不长,最长的是解析JSON字符串>对象

    对于您的循环,我会制作如下内容:

    obj=JSON.parse({0:["aNumber","aText","anID"],1:["aNumber","aText","anID"]});
    arr=[];
    for(i in obj){
      o=obj[i]; // improve performances on big objects
      arr.push({url: "http://www.myurl.com/"+ o[0] + ".jpg", caption:o[1], id:o[2]});
    }
    

    有些软件在某种程度上必须迭代结构,除非你有一个拥有10000核CPU的移动设备。@Pointy:是的,但我希望在另一个层次上会有更好的性能。@Rocket:可能不是循环本身,而是你在它体内做的事情。你知道这是否真的是一个问题吗?很容易证明,为每一个实际操作做一个简单的说明。在两个设备上计时。看看它是否可以接受。它很可能是一个微优化,如果不能,则在得到测量之前无法客观地改进。某些级别的软件将不得不迭代结构,除非你有一个拥有10000核心CPU的移动设备。@Poin泰:是的,但我希望在另一个层面上会有更好的表现。@Rocket:也许这不是回路本身,而是你们在回路内部所做的事情,你们知道这是否真的是一个问题吗?很容易证明,为每一个实际做这件事的人做一个简单的测试。在几个设备上计时。看看它是否可以接受。这很可能是一个微优化如果不是的话,在你得到测量数据之前,它是无法客观地改进的。好吧,它也取决于设备硬件:10000是一个“最新的”系统可以很好地容忍的“设备,虽然可能会减慢旧设备的速度定义真正的目标平台并进行实际的基准测试总是比猜测好。在进行基准测试之前,你必须找到你想要比较的东西。循环可以完成任务,但我在寻找不同的东西(如果没有其他方法,没有问题)。如果我可以决定(我不能)我会以另一种格式接收数据,但这是不能更改的(而且这种特定类型的对象数组会提供给第三方库,所以我也不能更改它,如果不更改其核心,就没有时间了)……好吧,这也取决于设备硬件:10000是一个“最新”的设备,而可能会减慢旧设备的速度定义真正的目标平台和进行实际的基准测试总是比猜测好。好吧,在进行基准测试之前,你必须找到你想要比较的东西。循环可以完成工作,但我在寻找不同的东西(如果没有其他方法,没有问题)。如果我可以决定(我不能)我会以另一种格式接收数据,但这是不能更改的(这种特定类型的对象数组会提供给第三方库,因此我也不能更改它,如果不更改其核心,就没有时间进行更改)…不要忘记o=obj[I],它可以防止javascript引擎在整个对象上运行。无论如何,最好的解决方案是让您自己的解析器直接处理这个问题,即使它可能没有JSON强大。解析一个用C+循环编写的解析器不要忘记o=obj[i],它会阻止javascript引擎在整个对象上运行。无论如何,最好的解决方案是让您自己的解析器直接处理这个问题,甚至它可能没有C+循环中编写的JSON.parse强大