PHP json_decode()는 유효한 것처럼 보이는 JSON을 사용하여 NULL을 반환합니까?
플레인 텍스트파일에 저장되어 있는 JSON 오브젝트는 다음과 같습니다.
{
"MySQL": {
"Server": "(server)",
"Username": "(user)",
"Password": "(pwd)",
"DatabaseName": "(dbname)"
},
"Ftp": {
"Server": "(server)",
"Username": "(user)",
"Password": "(pwd)",
"RootFolder": "(rf)"
},
"BasePath": "../../bin/",
"NotesAppPath": "notas",
"SearchAppPath": "buscar",
"BaseUrl": "http:\/\/montemaiztusitio.com.ar",
"InitialExtensions": [
"nem.mysqlhandler",
"nem.string",
"nem.colour",
"nem.filesystem",
"nem.rss",
"nem.date",
"nem.template",
"nem.media",
"nem.measuring",
"nem.weather",
"nem.currency"
],
"MediaPath": "media",
"MediaGalleriesTable": "journal_media_galleries",
"MediaTable": "journal_media",
"Journal": {
"AllowedAdFileFormats": [
"flv:1",
"jpg:2",
"gif:3",
"png:4",
"swf:5"
],
"AdColumnId": "3",
"RSSLinkFormat": "%DOMAIN%\/notas\/%YEAR%-%MONTH%-%DAY%\/%TITLE%/",
"FrontendLayout": "Flat",
"AdPath": "ad",
"SiteTitle": "Monte Maíz: Tu Sitio",
"GlobalSiteDescription": "Periódico local de Monte Maíz.",
"MoreInfoAt": "Más información aquí, en el Periódico local de Monte Maíz.",
"TemplatePath": "templates",
"WeatherSource": "accuweather:SAM|AR|AR005|MONTE MAIZ",
"WeatherMeasureType": "1",
"CurrencySource": "cotizacion-monedas:Dolar|Euro|Real",
"TimesSingular": "vez",
"TimesPlural": "veces"
}
}
it it it it it it로 하면json_decode()
NULL?은 읽을 수 ).file_get_contents()
정상적으로 동작했습니다).
JSON을 http://jsonlint.com/에 대해 테스트했는데, 완벽하게 유효합니다.
여기 무슨 일 있어?
이건 내게 효과가 있었다.
json_decode( preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $json_string), true );
특수문자의 인코딩일 수 있습니다.json_last_error()에게 확실한 정보를 얻을 수 있습니다.
한번 써보세요.
json_decode(stripslashes($_POST['data']))
Chrome에서 요청을 체크하면 JSON이 텍스트임을 알 수 있으므로 공백 코드가 JSON에 추가되었습니다.
를 사용하여 클리어 할 수 있습니다.
$k=preg_replace('/\s+/', '',$k);
다음으로 다음을 사용할 수 있습니다.
json_decode($k)
print_r
그러면 배열이 표시됩니다.
숨겨진 캐릭터들이 당신의 아들을 괴롭히고 있을지도 모릅니다.이걸 시도해 보세요.
$json = utf8_encode($yourString);
$data = json_decode($json);
저도 같은 문제가 있어서 디코딩하기 전에 인용문자를 교체해서 간단히 해결했습니다.
$json = str_replace('"', '"', $json);
$object = json_decode($json);
JSON 값은 JSON.stringify 함수에 의해 생성되었습니다.
javascript에서 json을 수신하면 php 함수가 stripslashes() 동작합니다.python에서 json을 수신하면 배열이 연관성이 있기 때문에 json_decode 호출에 대한 두 번째 옵션 파라미터가 기능을 수행합니다.나한테는 아주 잘 먹혀.
$json = stripslashes($json); //add this line if json from javascript
$edit = json_decode($json, true); //adding parameter true if json from python
이 오류는 JSON 문자열이 유효하지 않음을 의미합니다.
오류가 발생하여 PHP가 실패 이유를 포함하여 예외를 슬로우할 때 예외를 슬로우합니다.
사용방법:
$json = json_decode($string, null, 512, JSON_THROW_ON_ERROR);
이것은 에러의 종류를 이해하는 데 도움이 됩니다.
<?php
// A valid json string
$json[] = '{"Organization": "PHP Documentation Team"}';
// An invalid json string which will cause an syntax
// error, in this case we used ' instead of " for quotation
$json[] = "{'Organization': 'PHP Documentation Team'}";
foreach ($json as $string) {
echo 'Decoding: ' . $string;
json_decode($string);
switch (json_last_error()) {
case JSON_ERROR_NONE:
echo ' - No errors';
break;
case JSON_ERROR_DEPTH:
echo ' - Maximum stack depth exceeded';
break;
case JSON_ERROR_STATE_MISMATCH:
echo ' - Underflow or the modes mismatch';
break;
case JSON_ERROR_CTRL_CHAR:
echo ' - Unexpected control character found';
break;
case JSON_ERROR_SYNTAX:
echo ' - Syntax error, malformed JSON';
break;
case JSON_ERROR_UTF8:
echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
break;
default:
echo ' - Unknown error';
break;
}
echo PHP_EOL;
}
?>
오늘 이 문제에 부딪혔기 때문에 추가하려고 합니다.JSON 문자열을 둘러싼 문자열 패딩이 있는 경우 json_decode는 NULL을 반환합니다.
PHP 변수 이외의 소스에서 JSON을 풀하는 경우 먼저 "트림"하는 것이 현명합니다.
$jsonData = trim($jsonData);
JSON 데이터에서 유효한 NULL 결과를 얻을 때 가장 중요한 것은 다음 명령을 사용하는 것입니다.
json_last_error_msg();
이.
var_dump(json_last_error_msg());
string(53) "Control character error, possibly incorrectly encoded"
다음으로 이 문제를 해결합니다.
$new_json = preg_replace('/[[:cntrl:]]/', '', $json);
제 https://stackoverflow.com/questions/17219916/64923728 를 해결한 방법은 다음과 같습니다.JSON 파일은 UTF-8 Encoding이어야 합니다.저는 UTF-8에 BOM이 있는 경우입니다.JSON 문자열 출력에 65279가 추가되어 있습니다.json_decode()
로 하다
제 경우, 같은 문제에 직면해 있었습니다만, 이것은 json 문자열 내부의 슬래시에 의해 발생했기 때문에,
json_decode(stripslashes($YourJsonString))
또는
json_decode( preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $YourJsonString), true );
상기가 동작하지 않는 경우는, 우선 html quote의 따옴표를 치환해 주세요.javascript에서 php로 데이터를 송신하고 있는 경우일 수 있습니다.
$YourJsonString = stripslashes($YourJsonString);
$YourJsonString = str_replace('"', '"', $YourJsonString);
$YourJsonString = str_replace('["', '[', $YourJsonString);
$YourJsonString = str_replace('"]', ']', $YourJsonString);
$YourJsonString = str_replace('"{', '{', $YourJsonString);
$YourJsonString = str_replace('}"', '}', $YourJsonString);
$YourJsonObject = json_decode($YourJsonString);
해결할 수 있을 거야
아마 다른 사람들이 말한 것처럼 BOM일 거예요.다음과 같이 시험해 보십시오.
// BOM (Byte Order Mark) issue, needs removing to decode
$bom = pack('H*','EFBBBF');
$response = preg_replace("/^$bom/", '', $response);
unset($tmp_bom);
$response = json_decode($response);
이는 Authorize와 같은 일부 SDK에서 알려진 버그입니다.그물
데이터베이스에서 json을 가져오려면
mysqli_set_charset($con, "utf8");
접속 링크 $con을 정의한 후
딱 한 번만 아껴요.3시간 동안 html 인코딩 문제라는 것을 알게 되었습니다.이거 드셔보세요
if(get_magic_quotes_gpc()){
$param = stripslashes($row['your column name']);
}else{
$param = $row['your column name'];
}
$param = json_decode(html_entity_decode($param),true);
$json_errors = array(
JSON_ERROR_NONE => 'No error has occurred',
JSON_ERROR_DEPTH => 'The maximum stack depth has been exceeded',
JSON_ERROR_CTRL_CHAR => 'Control character error, possibly incorrectly encoded',
JSON_ERROR_SYNTAX => 'Syntax error',
);
echo 'Last error : ', $json_errors[json_last_error()], PHP_EOL, PHP_EOL;
print_r($param);
html_entity_decode()가 작동했습니다.이거 드셔보세요.
$input = file_get_contents("php://input");
$input = html_entity_decode($input);
$event_json = json_decode($input,true);
알아내는 데 1시간 정도 걸렸지만 (JavaScript에서 작동하는) 쉼표가 PHP에서 실패합니다.
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
str_replace([PHP_EOL, ",}"], ["", "}"], $JSON);
.json 파일(예: config.json)을 작성할 것을 권장합니다.그런 다음 모든 json 개체를 붙여넣고 포맷합니다.따라서 json 오브젝트를 망가뜨리는 모든 것을 제거하고 깨끗한 복사 붙여넣기 json 오브젝트를 얻을 수 있습니다.
- 나도 같은 문제에 직면해 있어
- 다음 단계를 수정합니다.1) 브라우저에서 해당 변수를 인쇄 2) 프리포맷터로 변수 데이터 검증 3) 추가 처리 시 해당 데이터 복사/참조
- 그 후로는 아무 문제가 없었어요
이 문제는 값 또는 키에 ('' insted {")를 사용했기 때문에 발생합니다.
여기 잘못된 형식이 있습니다.
{'name':'ichsan'}
디코딩하면 NULL이 반환됩니다.
당신은 json 요청을 이렇게 전달해야 합니다.
{"name":"ichsan"}
JSON을 인쇄하고 페이지 소스(CTRL/CMD+U):
print_r(file_get_contents($url));
.<pre>
붙이다
이러한 점을 확인해야 합니다.
1. json 문자열에 알 수 없는 문자가 없습니다.
2. json 문자열은 온라인 json 뷰어에서 볼 수 있습니다(구글에서 온라인 뷰어 또는 json 파서로 검색 가능). 오류 없이 볼 수 있습니다.
3. 문자열에는 html 엔티티가 없습니다.일반 텍스트/문자열이어야 합니다.
포인트 3의 설명을 위해서
$html_product_sizes_json=htmlentities($html);
$ProductSizesArr = json_decode($html_product_sizes_json,true);
(htmlentities() 함수를 삭제합니다)
$html_product_sizes_json=$html;
$ProductSizesArr = json_decode($html_product_sizes_json,true);
제 경우 JSON 문자열의 작은 따옴표 때문입니다.
JSON 형식에서는 키와 문자열 값의 큰따옴표만 사용할 수 있습니다.
예:
$jsonString = '{\'hello\': \'PHP\'}'; // valid value should be '{"hello": "PHP"}'
$json = json_decode($jsonString);
print $json; // null
Javascript 구문 때문에 헷갈렸습니다.물론 Javascript에서는 다음과 같이 할 수 있습니다.
let json = {
hello: 'PHP' // no quote for key, single quote for string value
}
// OR:
json = {
'hello': 'PHP' // single quote for key and value
}
그러나 나중에 이러한 오브젝트를 JSON 문자열로 변환할 경우:
JSON.stringify(json); // "{"hello":"PHP"}"
PHP 관련 솔루션을 적용하기 전에 JSON 형식을 확인하십시오.아마 그게 문제일 거야.이 온라인 JSON 형식 검증 프로그램을 사용해 보십시오.
저는 json_decode()를 올바르게 동작시키기 위해 error_reporting을 꺼야 했습니다.이상하게 들리지만, 제 경우에는 사실이에요.디코딩하려는 JSON 문자열 사이에 알림이 인쇄되어 있기 때문입니다.
나도 똑같은 문제가 있었는데 이 코드로 해결되었다.
$zip = file_get_contents($file);
$zip = json_decode(stripslashes($zip), true);
저도 같은 문제가 있었는데 어떤 답변도 도움이 되지 않았습니다.JSON 객체의 변수 중 하나에 값이 있습니다.Andaman & Nicobar
이걸 지웠어요.&
내 코드는 완벽하게 작동했어
<?php
$json_url = "http://api.testmagazine.com/test.php?type=menu";
$json = file_get_contents($json_url);
$json=str_replace('},
]',"}
]",$json);
$data = json_decode($json);
echo "<pre>";
print_r($data);
echo "</pre>";
?>
언급URL : https://stackoverflow.com/questions/2410342/php-json-decode-returns-null-with-seemingly-valid-json
'programing' 카테고리의 다른 글
Oracle에서 테이블 크기를 계산하는 방법 (0) | 2023.03.19 |
---|---|
재스민:비동기 콜백이 재스민에 의해 지정된 타임아웃 내에 호출되지 않았습니다.디폴트_타임아웃_간격 (0) | 2023.03.19 |
Peeee 모델에서 JSON으로 (0) | 2023.03.19 |
mongo 쿼리의 출력을 csv 파일로 리디렉션 (0) | 2023.03.19 |
Wordpress Fatal 오류:검출되지 않은 오류: /wp-includes/wp-db.php:1570의 정의되지 않은 함수 mysql_connect()를 호출합니다. (0) | 2023.03.19 |