2013-11-02 63 views
1

我正在使用Google Apps腳本通過調用jsonStringify將Google電子表格中的數據格式化爲geoJSON。我的代碼從this original example修改。在電子表格中的每一行代表一個國家,包含相關GeoJSON的多邊形數據單細胞:如何強制jsonStringify輸出不帶引號的數組?

[[[74.92,37.24],[74.57,37.03],...[73.31,37.46],[74.92,37.24]]] 

但由於該單元格不包含數字,jsonStringify是解析它作爲一個字符串,返回此:

"coordinates":["[[[74.92,37.24],[74.57,37.03],...[73.31,37.46],[74.92,37.24]]]"] 

...我不能使用,因爲引號使它成爲無效的geoJSON。當我輸入一個單獨的數字時,jsonStringify會返回它沒有引號,我假設它是因爲它認識到它是一個數字。有什麼方法可以強制它將多邊形數據解釋爲數字或以其他方式逃避引號?這裏是我的代碼的相關章節:

function getObjects(data, keys) { 
    var objects = []; 
    var headers = getHeaders(sheet, activeRange, 1); 

    var zip = function(keys, data) { 
    var obj = {}; 
    for (var i = 0; i < keys.length; i++) { 
     obj[keys[i]] = data[i]; 
    } 
    return obj; 
    }; 

    for (var i = 0; i < data.length; i++) { 
    var obj = zip(headers, data[i]); 

//this is the polygon data 
    var poly = obj[settings.poly]; 

    var coordinates = [poly]; 

    // If we have an id and polygon data 
    if (obj[settings.id] && poly) { 
     // Define a new GeoJSON feature object 
     var feature = { 
     type: 'Feature', 
     // Get ID from UI 
     id: obj[settings.id], 
     geometry: { 
      type: 'MultiPolygon', 
      // Get coordinates from UIr 
      coordinates: coordinates 
     }, 
     // Place holder for properties object 
     properties: obj 
     }; 
     objects.push(feature); 
    } 
    } 
    return objects; 
} 

回答

0

不是傳遞一個字符串jsonStringify的「座標」中,傳遞一個實際陣列。也就是說,首先在原文中使用jsonParse(根據需要)獲取相關對象。

一個實例轉換(帶有保護,可能會或可能不適合)可能看起來像:

function restoreCoordinatesFromText(source) { 
    var geo = Utilities.jsonParse(source); 
    return (geo && (geo instanceof Array) 
      ? geo     // looks like we got our [array of stuff] 
      : theSourceData);  // dunno, let's act like we never saw it 
} 

再後來在實際座標數組可以同時串表現出初始在JSON正確編碼不希望的行爲。

var coords = "[1,2,3,4]"; /* just a string */ 

var json = Utilities.jsonStringify({ 
        /* array, good! */ 
    goodCoordinates: restoreCoordinatesFromText(coords), 
        /* string, bad! */ 
    badCoordinates: coords 
}); 

這裏是corresponding fiddle(它利用ES5 JSON支持)。

+0

非常感謝!我能夠解決你的問題。 – wbend

相關問題