從Server端收到的資訊是如下格式

user_i0_name=alive
user_i0_gender=male
user_i0_age=27
user_i0_company_c0_name=VIVOTEK
user_i0_company_c1_name=Mozilla
system_model=ABC1234
network_hostname=abc1234

但是這些資訊很難使用,想透過某個統一的方法把它轉成object來用。
另外存回去的時候要把object轉回跟上面一樣的assignment。

Step#1: eval拆解進區域變數

為了避免污染全域變數,前後取代原本的字串:

var object = {};
var string_rev_1 = (('object[\''+string).replace(/\r\n$/,'').replace(/\r\n/gi, '\r\nobject[\'').replace(/=/gi, '\']='));
eval(string_rev_1);
console.log(object)

現在得到了一個只有一層的object,是好用了一點,但是能不能切出多層來?

Step#2: 用底線切object

var string_rev_2 = string_rev_1.replace(/_/gi, '\''][\'');

但是這樣會有undefined的問題,如

user_i0_name=alive

會變成

object['user']['i0']['name']=alive

eval後會出現i10 is undefined.
所以要想辦法解決這種超前reference的狀況。

一個辦法是用\r\n切分assignment後個別eval,再用try catch區塊判斷是否發生超前定義的情況。
假設發生了就個別處理該assignment。

(待續)

Comments

comments powered by Disqus