Транспонировать массив объектов json

-1

Я должен перебирать объект "java-объект" price_detail. Пожалуйста, научите меня, как восстановить этот тип объекта. Я зациклился на многих структурах, но не на этом типе. Я не мог найти пример для такого типа структуры данных, который ищет "Итерацию через вложенный массив объектов 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]
        }

Спасибо.

EDIT: Я изменил название. После очистки сети я обнаружил, что мне нужно транспонировать результат 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']);

Я застрял в этой ошибке: Uncaught TypeError: Невозможно преобразовать неопределенные или null в объект

  • 0
    stackoverflow.com/questions/19323699/… Перед публикацией проведите небольшое исследование, а затем напишите некоторый код, чтобы попытаться решить собственную проблему. Если вы не можете заставить его работать, опубликуйте свой код здесь. Это не бесплатная служба кодирования и, конечно, не бесплатная исследовательская служба. Вы думаете, что никто никогда не пытался перебрать объект раньше или создать новый объект из результатов? Люди с радостью потратят свое время и усилия, чтобы помочь вам исправить ваш код, если станет ясно, что вы сначала приложили некоторые усилия.
  • 0
    Возможная копия итерации javascript объекта json PS Я предполагаю, что вы хотите сделать это в javascript, хотя вы даже не отметили язык в вопросе.
Показать ещё 2 комментария
Теги:

1 ответ

-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 был бы полезен здесь, но я действительно не знал, как транспонировать.
  • 0
    Нет проблем. Да, похоже, что вы редактировали свой вопрос за это время. У вас все еще есть проблема? Вам нужна помощь с этим, или вы это исправили? Я могу потенциально изменить ответ, чтобы получить желаемый выходной формат, если хотите. И почему понизили, или это был не ты?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню