2017-09-26 109 views
-1

我必须迭代“price_detail”json数组对象。请教我如何重新研究这种类型的对象。我已经穿过很多结构,但不是这种类型。我无法找到这种类型的数据结构的搜索移调json对象数组

码I使用“嵌套通过JSON对象阵列迭代”的一个例子:

 $.each(json.data['price_detail'], function (i, item) { 
     console.log('name='+ i + ' value=' +item); 
     } 

    output: 
    name=price value=14.7,14.7,14.7 
    name=type value=coupon,coupon,coupon 
    name=savings value=,75%,35% 
    name=pharmacy value=Walmart,Kmart,Costco 

数据具有如下的结构。

{"errors": [], 
      "data": {"form": "tablet", 
      "price_detail": 
       {"price": [14.7, 14.7, 14.7], 
       "type": ["coupon", "coupon", "coupon"], 
       "savings": [null, "75%", "35%"], 
       "pharmacy": ["Walmart", "Kmart", "Costco"]},      
       "brand": ["lortab", "maxidone", "vicodin", "norco", "xodol", "hycet"], 
       "dosage": "5mg/325mg", "generic": ["hydrocodone/acetaminophen", "lorcet", "zolvit"], 
       "prices": [14.7, 14.7, 14.7], 
       "quantity": 60, 
       "display": "Lortab, Maxidone, Vicodin, Norco, Xodol, Hycet (hydrocodone/acetaminophen, lorcet, zolvit)", 
       "manufacturer": "generic"}, 
       "success": true} 

我想要一个使用制药,类型,节省和价格的对象;如:

 { 
      ["Walmart", "coupon", NULL, 14.7], 
      ["Kmart", "coupon", "75%", 14.7], 
      ["Costco","coupon", "35%", 14.7] 
     } 

谢谢。

编辑:我改变了标题。淘宝网后,我发现我需要调换json结果。请原谅我缺乏术语。

我试图使用此功能,我发现转置的阵列

function transpose(a) { 
     return Object.keys(a[0]).map(function (c) { 
      return a.map(function (r) { 
       return r[c]; 
      }); 
     }); 
    } 

创建的测试数据,通过功能

var testData = [ [14.7, 14.7, 14.7], 
         ["coupon", "coupon", "coupon"], 
         [null, "75%", "35%"], 
         ["Walmart", "Kmart", "Costco"] 
       ] 
         var result = transpose(testData); 

运行它这使我所期望的结果。

[14.7, "coupon", null, "Walmart"], 
    [14.7, "coupon", "75%", "Kmart"], 
    [14.7, "coupon", "35%", "Costco"] 

现在,当我跑我的“price_detail”对象通过它

transpose(json.data['price_detail']); 

我陷在这样的错误:遗漏的类型错误:无法转换未定义或为空反对

+0

https://stackoverflow.com/questions/19323699/iterating-through-json-object-javascript做发布前一些研究,然后写一些代码,试图解决自己的问题。如果您无法使其工作,请在此处发布您的代码。这不是免费的编码服务,当然也不是免费的研究服务。你认为之前没有人尝试循环过一个对象,或者从结果中创建一个新对象?如果可以看到您先做出了自己的努力,人们会很乐意花时间和精力来帮助您修复代码。 – ADyson

+0

[迭代通过json对象javascript]可能的副本(https://stackoverflow.com/questions/19323699/iterating-through-json-object-javascript)我假设你想用javascript来做到这一点,尽管你甚至没有在问题中标记过某种语言。 – ADyson

+0

我确实做了一些研究,不再假设。我写了代码,谢谢你的提问。我不明白如何排列数据与列,我相信我需要通过列循环 – user2751629

回答

-1

你规定所需的输出不是有效的JSON,但是这里有一个例子可以产生我认为对你有用的格式。如果它不是你想要的,你现在可以看到如何修改它以适应你。

var json = { 
 
    "errors": [], 
 
    "data": { 
 
    "form": "tablet", 
 
    "price_detail": { 
 
     "price": [14.7, 14.7, 14.7], 
 
     "type": ["coupon", "coupon", "coupon"], 
 
     "savings": [null, "75%", "35%"], 
 
     "pharmacy": ["Walmart", "Kmart", "Costco"] 
 
    }, 
 
    "brand": ["lortab", "maxidone", "vicodin", "norco", "xodol", "hycet"], 
 
    "dosage": "5mg/325mg", 
 
    "generic": ["hydrocodone/acetaminophen", "lorcet", "zolvit"], 
 
    "prices": [14.7, 14.7, 14.7], 
 
    "quantity": 60, 
 
    "display": "Lortab, Maxidone, Vicodin, Norco, Xodol, Hycet (hydrocodone/acetaminophen, lorcet, zolvit)", 
 
    "manufacturer": "generic" 
 
    }, 
 
    "success": true 
 
}; 
 

 
var result = []; 
 

 
for (var i = 0; i < json.data.price_detail.pharmacy.length; i++) { 
 
    result.push({ 
 
    "pharmacy": json.data.price_detail.pharmacy[i], 
 
    "type": json.data.price_detail.type[i], 
 
    "savings": json.data.price_detail.savings[i], 
 
    "price": json.data.price_detail.price[i] 
 
    }); 
 
} 
 
console.log(JSON.stringify(result));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

下的编辑按钮你的解决方案比我能想到的更清晰。在回答答案之前,我可能编辑了我的文章。我有点想到.push方法在这里很有用,但我真的不知道如何转置。 – user2751629

+0

没问题。是的,它看起来像你在此期间编辑你的问题。你还有问题吗?你需要一些帮助吗,还是你修复它?如果你愿意的话,我可以修改答案来达到你想要的输出格式。为什么downvote,或者那不是你? – ADyson