2015-05-26 5 views
0

Мне нужно преобразовать этот объект JSON:Мне нужно преобразовать этот объект JSON в массив JSON

"errors": { 
    "store_id": [ 
     "The storeid field is required." 
    ], 
    "first_name": [ 
     "The firstnamefieldisrequired." 
    ], 
    "last_name": [ 
     "The lastnamefieldisrequired." 
    ], 
    "email": [ 
     "The emailfieldisrequired." 
    ], 
    "password": [ 
     "The passwordfieldisrequired." 
    ] 
} 

в массив JavaScript. Массив должен содержать такие ошибки, как «Требуется поле storeid». «Первое имя поля запрашивается».

ответ

0
var o = { 
    "store_id": [ 
     "The storeidfieldisrequired." 
    ], 
    "first_name": [ 
     "The firstnamefieldisrequired." 
    ], 
    "last_name": [ 
     "The lastnamefieldisrequired." 
    ], 
    "email": [ 
     "The emailfieldisrequired." 
    ], 
    "password": [ 
     "The passwordfieldisrequired." 
    ] 
} 
var a = []; 
var keys = Object.keys(o); 
var length = keys.length; 
for (var i = 0; i < length; i++) { 
    a.push(o[keys[i]]); 
} 
0

Object.keys и Array.prototype.map здесь особенно полезны.

function objectToArray(obj) { 
    return Object.keys(obj) 
    .map(function(key) { 
    return obj[key]; 
    }); 
} 

Это превратит ваш объект в плоский массив с взаимно однозначным отображением между клавишами и элементами.

{ a: 1, b: 2, c: 3 } -> [1, 2, 3] 

Однако ваш массив двумерный. Каждый ключ имеет массив как свойство. Например:

{ a: [1], b: [2], c: [3] } -> [[1], [2], [3]] 

Таким образом, вам нужно добавить шаг конкатенации в конец преобразования.

function flatten(errors) { 
    return errors.reduce(function(errorList, errors) { 
    return errorList.concat(errors); 
    }, []); 
} 

Это делает использование Array.prototype.reduce для того, чтобы сцепить каждый из массивов, чтобы дать уплощенную форму вашего 2d массива.

Конечный результат:

var json = { 
    "store_id": [ 
     "The storeid field is required." 
    ], 
    "first_name": [ 
     "The firstnamefieldisrequired." 
    ], 
    "last_name": [ 
     "The lastnamefieldisrequired." 
    ], 
    "email": [ 
     "The emailfieldisrequired." 
    ], 
    "password": [ 
     "The passwordfieldisrequired." 
    ] 
}; 

var errorList = flatten(objectToArray(json)); 
Смежные вопросы