2013-04-20 51 views
2

我有一些PHP源代碼,簡單的鍵值數組這樣的:解析PHP數組在JavaScript

return array('var1' => 'var2'); 

而且

return array('sub' => array('var1' => 'var2')); 

,我需要把它解析爲JavaScript對象,因爲我有一個PHP庫的JavaScript實現,我想用原始測試用例來測試兼容性。

有超過100個測試,所以手動轉換是不實際的。

有沒有簡單的方法將這些轉換成JavaScript對象而不使用PHP?

+1

爲什麼不使用JSON?爲什麼沒有PHP? – elclanrs 2013-04-20 08:28:25

+0

Json很好,但由於測試框架在node.js應用程序中運行,PHP不是一個好選擇。 – mabs 2013-04-20 11:24:49

回答

2

要真正回答你的問題 - 如何在不使用PHP的情況下將PHP的關聯數組解析爲JSON - 讓我們使用一些JavaScript代碼。

"array('sub' => array('var1' => 'var2'));".replace(/array\(/g, '{').replace(/\)/g, '}').replace(/=>/g, ':').replace(/;/g, '').replace(/'/g, '"'); 

這是假設你恰好坐在一些源代碼,並希望將其複製到Node.js應用,並且所有的數據看起來完全一樣。如果數據恰好在多行上,如果你甚至想解析「return」/「;」部分,如果某些數據包含索引數組,或者任何值包含我只是天真解析的字符串,則必須使該腳本更智能。

正如其他人所說,如果您正在與PHP服務交互,只需使用json_encode()即可。

+1

謝謝,這比我想象的要簡單得多。 – mabs 2013-04-22 03:03:46

0

您可以在PHP中使用json_encode(),在JavaScript中使用JSON.parse()

1

如果我理解正確的話,你需要使用json_encode()這樣的:

return json_encode(array('sub' => array('var1' => 'var2'))); 

返回值:{"sub":{"var1":"var2"}}

2

這應該工作!

<?# somefile.php ?> 
<script type="text/javascript"> 
    var json = '<?= json_encode(array('sub' => array('var1' => 'var2'))) ?>'; 
    var object = JSON.parse(json); 
    console.log(object); 
</script> 

輸出

{ 
    sub: { 
    var1: "var2" 
    } 
} 

更常見的是,你會看到一個語言無關的API,它只是提供了JSON響應。您可以使用JavaScript(通過Node.js等在瀏覽器中)對API的異步請求輕鬆地對此進行測試;

+1

是否需要'JSON.parse'?如果你寫'var object = <?php echo json_encode(array('sub'=> array('var1'=>'var2')))?>;'而不是? – user2264587 2013-04-20 09:12:35

+0

對象文字未在JSON中定義;它們在JavaScript的[對象字面值語法](https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Values,_variables,_and_literals#Object_literals)中定義。它們是相似的,但它們並不相同。 – naomik 2013-04-20 09:14:42

+0

我認爲JSON是對象文字語法的一個子集,因此如果某些東西是有效的JSON,它將是一個有效的文字? – user2264587 2013-04-20 09:17:48