PHP: json_decode가 작동하지 않습니다.
이것은 동작하지 않습니다.
$jsonDecode = json_decode($jsonData, TRUE);
그러나 문자열을 복사하면$jsonData
수동으로 디코드 기능에 넣으면 동작합니다.
이 방법은 다음과 같습니다.
$jsonDecode = json_decode('{"id":"0","bid":"918","url":"http:\/\/www.google.com","md5":"6361fbfbee69f444c394f3d2fa062f79","time":"2014-06-02 14:20:21"}', TRUE);
출력을 했다.$jsonData
복사하여 위와 같이 디코드 기능에 넣습니다.그리고 효과가 있었다.하지만 만약 내가$jsonData
디코드 기능에서 직접 사용할 수 없습니다.
var_dump($jsonData)
다음에 나타냅니다.
string(144) "{"id":"0","bid":"918","url":"http:\/\/www.google.com","md5":"6361fbfbee69f444c394f3d2fa062f79","time":"2014-06-02 14:20:21"}"
그$jsonData
암호화되어 있습니다.$_GET
변수.암호화하려면 다음을 사용합니다.
$key = "SOME KEY";
$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$enc = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $data, MCRYPT_MODE_ECB, $iv);
$iv = rawurlencode(base64_encode($iv));
$enc = rawurlencode(base64_encode($enc));
//To Decrypt
$iv = base64_decode(rawurldecode($_GET['i']));
$enc = base64_decode(rawurldecode($_GET['e']));
$data = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $enc, MCRYPT_MODE_ECB, $iv);
html 엔티티의 문제가 있는 경우도 있습니다.예를 들어 다음과 같이 표시됩니다.따라서 html 엔티티를 실제 텍스트로 해석해야 합니다.이 경우 html 엔티티를 php의 html_syslog() 메서드를 사용하여 실행할 수 있습니다.
$jsonData = stripslashes(html_entity_decode($jsonData));
$k=json_decode($jsonData,true);
print_r($k);
json_decode의 늘 결과를 피하기 위해 preg_replace를 사용해야 합니다.
다음은 코드 예시입니다.
$json_string = stripslashes(html_entity_decode($json_string));
$bookingdata = json_decode( preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $json_string), true );
대부분의 경우 복호화된 데이터에서 패딩을 제거해야 합니다.문자열에는 124개의 문자가 표시되지만var_dump
보고서 144 입니다.즉, 20자의 패딩을 제거해야 합니다(문자열 끝에 일련의 "0" 바이트).
아마도 블록의 끝에 4 "\0" 바이트 + 빈 16 바이트 블록(데이터의 끝을 표시)이 있을 것입니다.
현재 문자열을 어떻게 해독/암호화하고 있습니까?
편집:
문자열 끝에 0 바이트를 트리밍하려면 이 값을 추가해야 합니다.
$jsonData = rtrim($jsonData, "\0");
다른 댓글로 판단하건대, 당신은 그것을 사용할 수 있다.
$jsonDecode = json_decode(trim($jsonData), TRUE);
php 7.1로 이동하는 동안 json_decode 오류 번호 4(json syntex 오류)가 발생했습니다.이 페이지의 위의 솔루션 중 어느 것도 나에게는 효과가 없었습니다.
좀 더 검색해 본 결과, https://stackoverflow.com/a/15423899/1545384에서 해결책을 찾았고, 나에게도 효과가 있었습니다.
//Remove UTF8 Bom
function remove_utf8_bom($text)
{
$bom = pack('H*','EFBBBF');
$text = preg_replace("/^$bom/", '', $text);
return $text;
}
헤더를 반드시 JSON으로 설정하십시오.
header('Content-type: application/json;');
str_replace\t", ", str_replace\n", ", $string")
json_module은 특수문자와 함께 사용할 수 없기 때문입니다.에러는 표시되지 않습니다.탭 공간과 새 행을 삭제하십시오.취득하는 소스에 따라서는, stripslashes(html_entity_decode($string))도 필요하게 되는 경우가 있습니다.
효과적:
<?php
$sql = <<<EOT
SELECT *
FROM `students`;
EOT;
$string = '{ "query" : "' . str_replace("\t", " ", str_replace("\n", " ", $sql)).'" }';
print_r(json_decode($string));
?>
출력:
stdClass Object
(
[query] => SELECT * FROM `students`;
)
나는 그것이 문제가 있었다.json_decode
동작하지 않았습니다.해결책은 문자열 인코딩을 utf-8로 변경하는 것이었습니다.이는 라틴 문자가 아닌 경우 중요합니다.
흥미롭게도 mcrypt_decrypt는 패딩 알고리즘 때문에 결과 텍스트 끝에 \0 이외의 제어 문자를 추가하는 것으로 보입니다.따라서 대신rtrim($jsonData, "\0")
를 사용하는 것이 좋습니다.
preg_replace( "/\p{Cc}*$/u", "", $data)
mcrypt_syslog.json_syslog의 결과 $data는 모든 후행 제어 문자를 삭제하면 동작합니다.http://php.net/manual/en/function.mdecrypt-generic.php 에서 Peter Bailey 의 코멘트를 참조해 주세요.
이 코드 사용
<?php
$json = preg_replace('/[[:cntrl:]]/', '', $json_data);
$json_array = json_decode($json, true);
echo json_last_error();
echo json_last_error_msg();
print_r($json_array);
?>
JSON이 실제로 유효한지 확인합니다.어떤 이유에서인지 나는 이것이 유효한 JSON이라고 확신했다.
{ type: "block" }
그렇지 않은 동안.을 확인하는 입니다.json_decode
작동하지 않습니다.
JSON Validator 를 시험해 보겠습니다.
제 경우는 ''가 아닌 ''를 사용한 것이 문제였습니다.그래서 그것을 작동시키기 위해 교환을 해야 했습니다.
메모장+에서 json 파일의 인코딩을 "BOM이 없는 UTF-8"로 변경했습니다.JSON이 동작하기 시작했습니다.
TL;DR JSON에 코멘트가 포함되어 있지 않은지 확인합니다.
API 참조에서 JSON 구조를 가져와 Postman을 사용하여 요청을 테스트했습니다.방금 JSON을 복사 붙여넣은 상태인데, 그 안에 댓글이 있는지는 신경 쓰지 않았습니다.
...
"payMethod": {
"type": "PBL" //or "CARD_TOKEN", "INSTALLMENTS"
},
...
물론 댓글 삭제 후 json_decode()는 마법처럼 동작하기 시작했습니다.
다음 기능을 사용합니다.
JSON_ERROR_UTF8이 발생한 경우:
$encoded = json_encode( utf_convert( $responseForJS ) );
아래 함수는 어레이 데이터를 재귀적으로 인코딩하는 데 사용됩니다.
/* 일부 손상된 UTF-8 문자를 json_model에 사용합니다. * json_model에 의해 잘못 인코딩된 = 형식의 utf-8 문자에 유용합니다. */
function utf_convert( $mixed ) {
if (is_array($mixed)) {
foreach ($mixed as $key => $value) {
$mixed[$key] = utf8ize($value);
}
} elseif (is_string($mixed)) {
return mb_convert_encoding($mixed, "UTF-8", "UTF-8");
}
return $mixed;
}
다른 사용자에게 도움이 될 수 있습니다.NULL 값이 있는 경우 json 문자열을 체크 인합니다.NULL 값이 있는 경우 json_decode는 작동하지 않습니다.
이 슈퍼 베이직 기능이 도움이 될 수 있습니다.나중에 추가가 필요할 경우를 대비해 어레이에 NULL을 만들었습니다.
function jsonValueFix($json){
$json = str_replace( array('NULL'),'""',$json );
return $json;
}
json_decod를 두 번 사용했는데 효과가 있었어요.
$response = json_decode($apiResponse, true);
$response = json_decode($response, true);
언급URL : https://stackoverflow.com/questions/24001410/php-json-decode-not-working
'programing' 카테고리의 다른 글
H2-콘솔이 브라우저에 표시되지 않음 (0) | 2023.04.02 |
---|---|
JSON 및 이스케이프 문자 (0) | 2023.04.02 |
Spring Boot에서의 COR 테스트시험 (0) | 2023.04.02 |
AngularJs Material 웹 사이트와 같은 메뉴 만들기 (0) | 2023.04.02 |
URL에서 JSON 문자열을 가져오려면 어떻게 해야 합니까? (0) | 2023.04.02 |