Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> metoda json_decode(), odczyt pliku json nie działa, nie wiedzieć dlaczego ;-/
inshua
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 17.01.2014

Ostrzeżenie: (0%)
-----


Problem wygląda następująco:
za pomocą metody json_decode() chcę przetworzyć stringa np. tej postaci:
Cytat
[
{
"name": "Adam",
"age": "28",
"projects": [
"Shop",
"Website",
"Facebook"
]
},
{
"name": "Mark",
"age": "23",
"projects": [
"Website",
"Facebook"
]
},
{
"name": "Anna",
"age": "24",
"projects": [
"Facebook"
]
}
]


przykładowy kod wygląda tak:
  1. ($dane=json_decode($stringzjsonem,true))?$dane:$dane="NONE";
  2. $dane=print_r($dane,TRUE);


problem w tym, że $dane zawsze są = "NONE", dodam, że kodowanie wczytywanych do $stringzjsonem danych to utf-8
dobrze by było gdyby ktoś mnie chociaż naprowadził co jest nie tak?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
com
post
Post #2





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


przykład:
http://ideone.com/fuAn6U

Generalnie chodzi o to że musisz porównać do czegoś dane bo 1 wartość to jest warunek wiec albo nie rób tego tak albo spróbuj na zasadzie z przykładu (IMG:style_emoticons/default/wink.gif)

Ten post edytował com 17.01.2014, 22:46:06
Go to the top of the page
+Quote Post
inshua
post
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 17.01.2014

Ostrzeżenie: (0%)
-----


@COM dzięki za wychwycenie błędu ;D faktycznie podstawowa pomyłka, ale akurat nie to jest istotą mojego wpisu.
Chodzi o to,że wykorzystanie metody json_decode() nawet w takiej postaci jak poniżej:
  1. $dane=json_decode(trim($stringzjsonem,true),true,512);
  2. $dane=print_r($dane,TRUE);

zawsze zwraca $dane=NULL.
dodam, że $stringzjsonem ładuję za pomocą file_get_contents($plik) i chyba coś jest nie tak z tym stringiem chociaż samo kodowanie pliku jest utf-8, to jednak te same dane podstawione wprost do zmiennej - działają, tj.zwracają wartość - a po załadowaniu z pliku już nie ;-/

Ten post edytował inshua 18.01.2014, 11:26:15
Go to the top of the page
+Quote Post
vonski
post
Post #4





Grupa: Zarejestrowani
Postów: 292
Pomógł: 89
Dołączył: 27.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Czyli jak zrobisz tak:
$dane = file_get_contents($plik_z_danymi);
to $dane będą miały wartość FALSE?
Masz włączone wyświetlanie komunikatów (włącznie z E_WARNING i E_NOTICE)?
Go to the top of the page
+Quote Post
inshua
post
Post #5





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 17.01.2014

Ostrzeżenie: (0%)
-----


@vonski
nie, sama metoda $stringzjsonem=file_get_contents($plik) zwraca, w tym przypadku, coś takiego:
Cytat
$stringzjsonem=' [ { "name": "Adam", "age": "28", "projects": [ "Shop", "Website", "Facebook" ] }, { "name": "Mark", "age": "23", "projects": [ "Website", "Facebook" ] }, { "name": "Anna", "age": "24", "projects": [ "Facebook" ] } ]'

natomiast po podstawieniu $dane=json_decode($stringzjsonem,true,512) $dane są pustym stringiem ;-/
mam włączone E_ALL
Go to the top of the page
+Quote Post
vonski
post
Post #6





Grupa: Zarejestrowani
Postów: 292
Pomógł: 89
Dołączył: 27.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


A to:

  1. var_dump(mb_detect_encoding($string_z_jsonem))


zwraca 'ASCII' czy 'UTF-8'? Czy coś innego?
I czy plik z JSON-em na pewno jest zakodowany w UTF-8 (bez BOM).

Ewentualnie, po wykonaniu json_decode($string_z_jsonem), co zwraca funkcja json_last_error?
Go to the top of the page
+Quote Post
ctom
post
Post #7





Grupa: Zarejestrowani
Postów: 321
Pomógł: 55
Dołączył: 19.04.2009

Ostrzeżenie: (0%)
-----


@inshua może to głupie pytanie ... ale zwartością twojego pliku nie jest dokładnie to co zacytowałeś tylko to poniżej ?

Kod
  [ { "name": "Adam", "age": "28", "projects": [ "Shop", "Website", "Facebook" ] }, { "name": "Mark", "age": "23", "projects": [ "Website", "Facebook" ] }, { "name": "Anna", "age": "24", "projects": [ "Facebook" ] } ]
Go to the top of the page
+Quote Post
inshua
post
Post #8





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 17.01.2014

Ostrzeżenie: (0%)
-----


@vonski
-plik jest w utf-8 z BOM jak mi pokazuje notepad++
-mb_detect_encoding() zwraca 'UTF-8'
-json_last_error() zwraca code: 4 = 'JSON_ERROR_SYNTAX' czyli malformed JSON

@ctom
pytanie dobre bo być może na tym cała sprawa się zasadza, otóż w pliku mam to samo co podstawiam pod zmienną jako stringa, czyli jeżeli dam jako zmienną:
Cytat
$stringzjsonem=' [ { "name": "Adam", "age": "28", "projects": [ "Shop", "Website", "Facebook" ] }, { "name": "Mark", "age": "23", "projects": [ "Website", "Facebook" ] }, { "name": "Anna", "age": "24", "projects": [ "Facebook" ] } ]'

i użyję jej w $dane=json_decode($stringzjsonem,true,512) to $dane są prawidłowo zdekodowanym jsonem, natomiast jeżeli tego samego stringa wrzucę do pliku, czyli w pliku mam:
Cytat
[ { "name": "Adam", "age": "28", "projects": [ "Shop", "Website", "Facebook" ] }, { "name": "Mark", "age": "23", "projects": [ "Website", "Facebook" ] }, { "name": "Anna", "age": "24", "projects": [ "Facebook" ] } ]

i zapiszę jako utf-8, to po wczytaniu go za pomocą $stringzjsonem=file_get_contents($plik) a potem spróbuję $dane=json_decode($stringzjsonem,true,512) to już $dane są puste ;-/
coś robię nie tak?
Go to the top of the page
+Quote Post
vonski
post
Post #9





Grupa: Zarejestrowani
Postów: 292
Pomógł: 89
Dołączył: 27.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Zamień kodowanie pliku z JSON-em na UTF-8 (bez BOM) - właśnie przez ten BOM masz JSON_ERROR_SYNTAX.

Ten post edytował vonski 18.01.2014, 16:41:26
Go to the top of the page
+Quote Post
inshua
post
Post #10





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 17.01.2014

Ostrzeżenie: (0%)
-----


Yup, dzięki za pomoc!
Kurde już kiedyś miałem problem przez BOM ale zapomniałem o tym ;D
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.10.2025 - 07:12