2016-08-13 4 views
1

Я пытаюсь использовать Apps Script для преобразования значений в листе на многоуровневый JSON.Конвертировать листы Google в виде многоуровневого массива JSON

Это достаточно легко преобразовать значения к одному уровню JSON так:

[{ 
    "name": "Bob Jones", 
    "phone": "555-555-5555", 
    "street": "123 Somewhere St.", 
    "city": "Nowhere", 
    "state": "ID", 
    "postal": 45632, 
    "country": "USA" 
}] 

Но то, что я хочу, это:

[{ 
    "name": "Bob Jones", 
    "phone": "555-555-5555", 
    "address": { 
    "street": "123 Somewhere St.", 
    "city": "Nowhere", 
    "state": "ID", 
    "postal": 45632, 
    "country": "USA" 
    } 
}] 

Вот код, используемый формат JSON:

function makeJSON_(object, options) { 
    if (options.format == FORMAT_PRETTY) { 
    var jsonString = JSON.stringify(object, null, 4); 
    } else if (options.format == FORMAT_MULTILINE) { 
    var jsonString = Utilities.jsonStringify(object); 
    jsonString = jsonString.replace(/},/gi, '},\n'); 
    jsonString = prettyJSON.replace(/":\[{"/gi, '":\n[{"'); 
    jsonString = prettyJSON.replace(/}\],/gi, '}],\n'); 
    } else { 
    var jsonString = Utilities.jsonStringify(object); 
    } 
    return jsonString; 
} 

было бы достаточно легко настроить «предварительно CONVER sion ", чтобы создать подстроку JSON, но это не является гибким и будет поддерживать зверя.

Как сделать JSON.stringify() данные листа для автоматического создания подстрок?

ответ

1

Чтобы перейти от версии JSON у вас есть на тот, который вы хотите пойти вы можете сделать следующее -

var json = [{ 
    "name": "Bob Jones", 
    "phone": "555-555-5555", 
    "street": "123 Somewhere St.", 
    "city": "Nowhere", 
    "state": "ID", 
    "postal": 45632, 
    "country": "USA" 
}] 

for (var i=0; i < json.length; i++){ 
    var currentObj = json[i]; 
    // make a temporary address object 
    var address = {}; 
    // copy all the attributes over to the temp object 
    address.street = currentObj.street; 
    address.city = currentObj.city; 
    address.state = currentObj.state; 
    address.postal = currentObj.postal; 
    address.country = currentObj.country; 
    // add address to the original object 
    currentObj.address = address; 
    // get rid of the following attributes from parent 
    delete currentObj.street; 
    delete currentObj.city; 
    delete currentObj.state; 
    delete currentObj.postal; 
    delete currentObj.country; 
} 


console.log(json); 

Намного проще, чем замена вещи в строке.

http://codepen.io/anon/pen/XKOrXa

+0

Я как раз собирался предложить эту последнюю замену. Оно работает! – davids

+0

Я изменил код, чтобы не использовать jquery и не понял, что я испортил! рад, что он работает сейчас. – charsi