Tengo un script en Sheets que se supone que aplana una publicación JSON, pero tengo algunas dificultades para sortear el formato del JSON entrante.
A continuación, tengo un POST de ejemplo que estoy tratando de analizar. Debajo está mi función doPost, con algunas de las formas en que he intentado obtener el contenido. doPost usa otra función para analizar realmente el contenido, pero parece que no puedo evitar lo que parece un JSON con formato de matriz.
Aquí hay un ejemplo del objeto POST:
[ { "id": "xyz123", "payload": { "reference_id": "id_6", "unit_id": "000111222", "origin": { "name": "T-shirt Supply", "city": "Jiujiang", "state": "Jiangxi", "country": "China", }, "destination": { "name": "Main Office", "city": "Surabaya", "state": "East Java", "country": "Indonesia", }, }, "status": "data_received", "created_at": "2020-01-29T07:41:33.918Z", "updated_at": "2020-01-29T07:41:33.918Z" } ]He intentado acceder a los contenidos de varias maneras, como payload.reference_id, pero por alguna razón no puedo encontrar mi camino hacia los corchetes del objeto JSON. Estas son algunas de las formas que he probado:
function doPost(e){ var data = e.postData.contents; // returns JSON formatted [{ "id": "xyz", "payload" : {"reference" : "1", "updated" : true}}] var data2 = JSON.parse(e.postData.contents); // returns [object Object] var data3 = data[0]; // returns [ var data4 = ContentService.createTextOutput(e.postData.contents).setMimeType(ContentService.MimeType.JSON); // same result as 'data' return dataX; }También he intentado varias soluciones, como analizar dos veces, secuenciar y más. ¡¡¡Cualquier ayuda es muy apreciada!!!
Creo que no necesita analizar e.postData.contents, probablemente ya sea un objeto, no una cadena.
O si es una cadena y solo hay un elemento, puede probar esto:
var data2 = JSON.parse(e.postData.contents.slice(1,-1));Creo que su objetivo es el siguiente.
doPost .Si mi comprensión es correcta, ¿qué tal la siguiente modificación?
function doPost(e){ var data2 = JSON.parse(e.postData.contents); return ContentService.createTextOutput(JSON.stringify(data2[0])).setMimeType(ContentService.MimeType.JSON); }e.postData.contents es su valor de muestra. Tenga cuidado con esto.