2010-10-07 31 views
7

Nie mogę się dowiedzieć, jak uzyskać tablicę JS w PHP.Parsowanie tablic javascript w PHP

Co muszę pracować wygląda następująco:

var arrLow = [ 
{ 
"e": "495864", 
"rank": "8678591", 
"rankmove": "<p><img src='up.php?uStyle=144'> UP 495864" 
}, 
{ 
"e": "104956", 
"rank": "-", 
"rankmove": "<p><img src='up.php?uStyle=145'> DOWN 1" 
}, 
{ 
"e": "0", 
"rank": "0", 
"rankmove": "<p><img src='up.php?uStyle=975'> NEW" 
} 
] 

json_decode a inni po prostu zwróci NULL, google zwraca tylko jakiś dziwny sposób korzystania serialize() z HTTP POST ze JS-zrozumienia przeglądarki, która naprawdę nie mogę tu pracować

Czy ktoś ma żadnego pojęcia jak: x

============================ ==============================================

edytuj: Dzięki chłopaki! Nie wiedziałem, że to było takie łatwe.

<?php 
$json = file_get_contents('24d29b1c099a719zr8f32ce219489cee.js'); 
$json = str_replace('var arrLow = ','' ,$json); 
$data = json_decode($json); 
echo $data[0]->e; 
?> 
+0

Czy próbujesz skopiować/wkleić tę tablicę do PHP? Ogólnie każda tablica JS wysyłana do PHP będzie serializowana w takiej czy innej formie. Czy możesz podać przykład tego, jak próbujesz go użyć? – mway

+0

Zadanie cron (nie jest pod moją kontrolą) pobiera je i zapisuje jako przykład.js. Zmienia się co godzinę, a ja po prostu czytam go w PHP i próbuję go przetworzyć. Zasadniczo pojawia się jako plik w postaci zwykłego tekstu i mogę pracować tylko z PHP (lub bash) – jen

+0

możesz spróbować tego: var_dump (json_decode ($ arrLow)); gdzie $ arrLow jest wysyłane z javascript, zwykle w formie lub przez AJAX. –

Odpowiedz

8

Do tego można użyć json_decode(). Sztuką jest pozostawienie części var arrLow = (tak, aby pozostała tylko sama tablica). Można przypisać wartość do zmiennej php $arrLow tak:

$js = '[ {"e" : "495864", ...'; 
$arrLow = json_decode($js); 

A quick'n'dirty siekać usunąć początek byłoby użyć funkcji strstr().

$js = strstr('var arrLow = [ {..', '['); 
+0

Co byłoby szybsze, strstr() lub str_replace()? Po prostu ciekawy. – jen

+0

Nie wiem na pewno, ale myślę, że 'strstr()' powinien być szybszy. Nie mogę tego potwierdzić, ale ktoś na php.net stwierdził, że 'strstr()' jest szybszy niż wyrażenie 'strpos()! == false' (http://ch2.php.net/manual/en/function .strstr.php # 39236). Jeśli to prawda, prawdopodobnie jest to szybsze niż 'str_replace()'. – svens

+0

Dobra, zaktualizowana do użycia strstr. Bardzo dziękuję za pomoc, naprawdę to doceniam. Nie sądziłem, że to takie łatwe ... – jen

1

2 opcje:

  1. prostu usunąć var arrLow = z przodu (może potrzebować regex jeśli jego zmiennej) i analizować jako JSON.
  2. idź do pełna na javascript parsing
0

Według JSONLint walidator jest ważne JSON (bez var arrLow =). Tak więc każda dobra implementacja json_decode() powinna załatwić sprawę. Być może implementacja, której używasz, ma pewne ograniczenia? Witryna JSON.org ma schludne list of links to implementations of json_decode in PHP (i wiele innych języków). Możesz być pewien, że znajdziesz taki, który działa.

0
//define javascript array 
>var mainArray = {};  
>  // inner loops 
mainArraySub['XXX'] = [];  

      mainArray = JSON.stringify(mainArray); 
     passing javascript array content in jquery ajax request as 
     $.ajax({ 
     type: "POST", 
    data:{paramval:mainArray}, 
    dataType: "json", 
    url: url, 
    success: function(msg){ 

      } 
     });  


in POST request you will get as below 

{"row1":{"0":{"nnnn":"aaaa"},"1":{"Movie":"aaaa"},...}   

// in a.php file call as below 

$Info = $_REQUEST['rowdata']; 
$tre = json_decode(stripslashes($Info),true); 
var_dump($tre);