2013-07-05 20 views
28

Mam następujący wynik z kwerendy SQL:przekonwertować ciąg JSON obiektu php

{"Coords":[ 
    {"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"}, 
    {"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"}, 
    {"Accuracy":"65","Latitude":"53.27770755361785","Longitude":"-9.011979642121824","Timestamp":"Fri Jul 05 2013 12:02:09 GMT+0100 (IST)"}, 
    {"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"}, 
    {"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"} 
    ] 
} 

Teraz jest ciągiem w php, to istnieje prosty sposób przekonwertować to do obiektu JSON (wiem jest już w formie JSON).

muszę, że jest to przedmiot, więc mogę dodać dodatkowy punkt/elementu/przedmiot jak co Coords już jest

EDIT: Sorry chłopaki, ja wklejony STARY/ŹLE STRING!

+12

To nie jest prawidłowy JSON. Będzie ci ciężko przełożyć to na cokolwiek. – deceze

+0

@deceze co jest nieważne? – user2363025

+7

@ user2363025 sprawdź na http://jsonlint.com/ –

Odpowiedz

61

Co @deceze powiedział jest poprawna, to wydaje się, że JSON jest zniekształcone, spróbuj tego:

{ 
    "Coords": [{ 
     "Accuracy": "30", 
     "Latitude": "53.2778273", 
     "Longitude": "-9.0121648", 
     "Timestamp": "Fri Jun 28 2013 11:43:57 GMT+0100 (IST)" 
    }, { 
     "Accuracy": "30", 
     "Latitude": "53.2778273", 
     "Longitude": "-9.0121648", 
     "Timestamp": "Fri Jun 28 2013 11:43:57 GMT+0100 (IST)" 
    }, { 
     "Accuracy": "30", 
     "Latitude": "53.2778273", 
     "Longitude": "-9.0121648", 
     "Timestamp": "Fri Jun 28 2013 11:43:57 GMT+0100 (IST)" 
    }, { 
     "Accuracy": "30", 
     "Latitude": "53.2778339", 
     "Longitude": "-9.0121466", 
     "Timestamp": "Fri Jun 28 2013 11:45:54 GMT+0100 (IST)" 
    }, { 
     "Accuracy": "30", 
     "Latitude": "53.2778159", 
     "Longitude": "-9.0121201", 
     "Timestamp": "Fri Jun 28 2013 11:45:58 GMT+0100 (IST)" 
    }] 
} 

Zastosowanie json_decode($string) przekonwertować ciąg na tablicy/Object (stdClass): http://php.net/manual/en/function.json-decode.php

[edited]

ja nie rozumiem, co masz na myśli przez "oficjalnego obiektu JSON", ale załóżmy chcesz dodać zawartość do json za pośrednictwem PHP, a następnie konwertuje ją z powrotem do JSON?

zakładając, że masz następujące zmienne:

$data = '{"Coords":[{"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27770755361785","Longitude":"-9.011979642121824","Timestamp":"Fri Jul 05 2013 12:02:09 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"}]}'; 

należy przekonwertować go do Array/przedmiot (stdClass):

$manage = json_decode($data);

Ale praca z stdClass jest bardziej skomplikowana niż PHP -Array, a następnie spróbuj tego:

$manage = (array) json_decode($data);

ten sposób można korzystać z funkcji tablicy: http://php.net/manual/en/function.array.php

dodając przedmiot:

$manage = (array) json_decode($data); 

echo 'Before: <br>'; 
print_r($manage); 

$manage['Coords'][] = Array(
    'Accuracy' => '90' 
    'Latitude' => '53.277720488429026' 
    'Longitude' => '-9.012038778269686' 
    'Timestamp' => 'Fri Jul 05 2013 11:59:34 GMT+0100 (IST)' 
); 

echo '<br>After: <br>'; 
print_r($manage); 

usunąć pierwszy element:

$manage = (array) json_decode($data); 
echo 'Before: <br>'; 
print_r($manage); 
array_shift($manage['Coords']); 
echo '<br>After: <br>'; 
print_r($manage); 

szansę chcesz zapisać json do bazy danych lub plik:

$data = '{"Coords":[{"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27770755361785","Longitude":"-9.011979642121824","Timestamp":"Fri Jul 05 2013 12:02:09 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"}]}'; 

$manage = (array) json_decode($data); 

$manage['Coords'][] = Array(
    'Accuracy' => '90' 
    'Latitude' => '53.277720488429026' 
    'Longitude' => '-9.012038778269686' 
    'Timestamp' => 'Fri Jul 05 2013 11:59:34 GMT+0100 (IST)' 
); 

if(($id = fopen('datafile.txt','w'))){ 
    fwrite($id,json_encode($manage)); 
    fclose($id); 
} 

Mam nadzieję, że zrozumiał swoje pytanie.

Powodzenia.

+0

dziękuję za konstruktywną pomoc – user2363025

+2

json_decode załatwił sprawę .. dziękuję – zeetit

+0

Dziękuję ci za wyciągnięcie moich włosów, dlaczego tablica, którą pcham do innej tablicy jest pokazywana jako ciąg zamiast obiektu. –

0

Spróbuj z json_encode().

I spójrz ponownie Valid JSON

+3

Sprawdź to: http://w3fools.com/ – Dan

10

Aby przekonwertować prawidłowy ciąg JSON z powrotem, można użyć metody json_decode().

Aby przekonwertować go z powrotem do użytku obiektów tą metodą:

$jObj = json_decode($jsonString); 

I przekonwertować go do tablicy asocjacyjnej, ustawić drugi parametr true:

$jArr = json_decode($jsonString, true); 

Przy okazji przekształcenia Twój wspomniany ciąg z powrotem do jednego z nich, powinieneś mieć prawidłowy ciąg JSON. Aby to osiągnąć, należy wykonać następujące czynności:

  1. W tablicy Coords usunąć dwa " (podwójny cudzysłów) z początku i końca obiektu.
  2. Obiekty w tablicy są przecinkami seprated (,), więc dodać przecinki pomiędzy obiektami w tablicy Coords ..

i trzeba będzie poprawny JSON String ..

tutaj jest JSON String I konwertowane do jednego ważnego: http://pastebin.com/R16NVerw

Powiązane problemy