JSON 문자열을 배열로 변환하는 방법
PHPJSON 문자열을 배열로 변환하는 방법
제가하고 싶은 것은 다음과 같습니다 :
이 m PHP에서 점점 JSON 문자열을 json 전달할 수 있지만 배열로 변환 할 수 없습니다.
echo $str='{
action : "create",
record: {
type: "n$product",
fields: {
n$name: "Bread",
n$price: 2.11
},
namespaces: { "my.demo": "n" }
}
}';
$json = json_decode($str, true);
위의 코드는 배열을 반환하지 않습니다.
해결법
-
==============================
1.json_decode에 게시물의 JSON을 전달하면 실패합니다. 유효한 JSON 문자열에는 인용 된 키가 있습니다.
json_decode에 게시물의 JSON을 전달하면 실패합니다. 유효한 JSON 문자열에는 인용 된 키가 있습니다.
json_decode('{foo:"bar"}'); // this fails json_decode('{"foo":"bar"}', true); // returns array("foo" => "bar") json_decode('{"foo":"bar"}'); // returns an object, not an array.
-
==============================
2.이 시도:
이 시도:
$data = json_decode($your_json_string, TRUE);
두 번째 매개 변수는 디코딩 된 json 문자열을 연관 배열로 만듭니다.
-
==============================
3.$ _REQUEST, $ _GET 또는 $ _POST를 사용하여 양식에서 JSON 문자열을 가져 오는 경우 html_entity_decode () 함수를 사용해야합니다. 나는 내가 var_dump를 요청할 때까지 이것을 깨닫지 못했고 대본을 복사하고 echo 문을보고 요청 문자열이 훨씬 더 큽니다.
$ _REQUEST, $ _GET 또는 $ _POST를 사용하여 양식에서 JSON 문자열을 가져 오는 경우 html_entity_decode () 함수를 사용해야합니다. 나는 내가 var_dump를 요청할 때까지 이것을 깨닫지 못했고 대본을 복사하고 echo 문을보고 요청 문자열이 훨씬 더 큽니다.
올바른 길 :
$jsonText = $_REQUEST['myJSON']; $decodedText = html_entity_decode($jsonText); $myArray = json_decode($decodedText, true);
오류 :
$jsonText = $_REQUEST['myJSON']; $myArray = json_decode($jsonText, true); echo json_last_error(); //Returns 4 - Syntax error;
-
==============================
4.json_decode ($ json_string, TRUE) 함수를 사용하여 JSON 객체를 배열로 변환합니다.
json_decode ($ json_string, TRUE) 함수를 사용하여 JSON 객체를 배열로 변환합니다.
예:
$json_string = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; $my_array_data = json_decode($json_string, TRUE);
참고 : 두 번째 매개 변수는 디코딩 된 JSON 문자열을 연관 배열로 변환합니다.
===========
산출:
var_dump($my_array_data); array(5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) }
-
==============================
5.file_get_contents를 사용하여 URL에서 json 문자열을 가져 오는 경우 다음 단계를 수행하십시오.
file_get_contents를 사용하여 URL에서 json 문자열을 가져 오는 경우 다음 단계를 수행하십시오.
$url = "http://localhost/rest/users"; //The url from where you are getting the contents $response = (file_get_contents($url)); //Converting in json string $n = strpos($response, "["); $response = substr_replace($response,"",0,$n+1); $response = substr_replace($response, "" , -1,1); print_r(json_decode($response,true));
-
==============================
6.문자열은 다음 형식이어야합니다.
문자열은 다음 형식이어야합니다.
$str = '{"action": "create","record": {"type": "n$product","fields": {"n$name": "Bread","n$price": 2.11},"namespaces": { "my.demo": "n" }}}'; $array = json_decode($str, true); echo "<pre>"; print_r($array);
산출:
Array ( [action] => create [record] => Array ( [type] => n$product [fields] => Array ( [n$name] => Bread [n$price] => 2.11 ) [namespaces] => Array ( [my.demo] => n ) ) )
-
==============================
7.JSON 파일이나 구조체를 모든 중첩 수준의 PHP 스타일 배열로 변환해야하는 경우이 함수를 사용할 수 있습니다. 먼저 json_decode ($ yourJSONdata)를 수행 한 다음이 함수에 전달해야합니다. 올바른 PHP 스타일 배열을 브라우저 창 (또는 콘솔)에 출력합니다.
JSON 파일이나 구조체를 모든 중첩 수준의 PHP 스타일 배열로 변환해야하는 경우이 함수를 사용할 수 있습니다. 먼저 json_decode ($ yourJSONdata)를 수행 한 다음이 함수에 전달해야합니다. 올바른 PHP 스타일 배열을 브라우저 창 (또는 콘솔)에 출력합니다.
https://github.com/mobsted/jsontophparray
-
==============================
8.
<?php $str='{ "action" : "create", "record" : { "type": "$product", "fields": { "name": "Bread", "price": "2.11" }, "namespaces": { "my.demo": "n" } } }'; echo $str; echo "<br>"; $jsonstr = json_decode($str, true); print_r($jsonstr); ?>
나는 이것이 작동해야한다고 생각합니다. 숫자가 아니라면 키는 큰 따옴표 안에 있어야합니다.
-
==============================
9.배열을 json으로 변환하고 싶다면 http://framework.zend.com/manual/en/zend.json.basics.html을 시도해보십시오. 그냥 zend_json 클래스를 사용하면 좋은 기능이 많이 있습니다.
배열을 json으로 변환하고 싶다면 http://framework.zend.com/manual/en/zend.json.basics.html을 시도해보십시오. 그냥 zend_json 클래스를 사용하면 좋은 기능이 많이 있습니다.
-
==============================
10.이 변환기를 사용하십시오, 전혀 실패하지 않습니다 : Services_Json
이 변환기를 사용하십시오, 전혀 실패하지 않습니다 : Services_Json
// create a new instance of Services_JSON $json = new Services_JSON(); // convert a complexe value to JSON notation, and send it to the browser $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4))); $output = $json->encode($value); print($output); // prints: ["foo","bar",[1,2,"baz"],[3,[4]]] // accept incoming POST data, assumed to be in JSON notation $input = file_get_contents('php://input', 1000000); $value = $json->decode($input); // if you want to convert json to php arrays: $json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
-
==============================
11.이 내 솔루션 : json string $ columns_validation = string (1736) "[{colId": "N_ni", "숨김": true, "aggFunc": null, "width": 136, "pivotIndex": null, "pinned" "rowGroupIndex": null, "colId": "J_2_fait", "hide": true, "aggFunc": null, "width": 67, "pivotIndex": null, "고정": null, "rowGroupIndex" 없는}]"
이 내 솔루션 : json string $ columns_validation = string (1736) "[{colId": "N_ni", "숨김": true, "aggFunc": null, "width": 136, "pivotIndex": null, "pinned" "rowGroupIndex": null, "colId": "J_2_fait", "hide": true, "aggFunc": null, "width": 67, "pivotIndex": null, "고정": null, "rowGroupIndex" 없는}]"
그래서 json_decode를 두 번 사용합니다 :
$js_column_validation = json_decode($columns_validation); $js_column_validation = json_decode($js_column_validation); var_dump($js_column_validation);
결과는 다음과 같습니다.
array(15) { [0]=> object(stdClass)#23 (7) { ["colId"]=> string(4) "N_ni" ["hide"]=> bool(true) ["aggFunc"]=> NULL ["width"]=> int(136) ["pivotIndex"]=> NULL ["pinned"]=> NULL ["rowGroupIndex"]=> NULL } [1]=> object(stdClass)#2130 (7) { ["colId"]=> string(8) "J_2_fait" ["hide"]=> bool(true) ["aggFunc"]=> NULL ["width"]=> int(67) ["pivotIndex"]=> NULL ["pinned"]=> NULL ["rowGroupIndex"]=> NULL }
-
==============================
12.문자열이 다음과 같은 JSON 형식으로되어 있는지 확인하십시오.
문자열이 다음과 같은 JSON 형식으로되어 있는지 확인하십시오.
{"result":"success","testid":"1"} (with " ") .
그렇지 않다면 요청 매개 변수에 "responsetype => json"을 추가 할 수 있습니다.
그런 다음 json_decode ($ response, true)를 사용하여 배열로 변환하십시오.
-
==============================
13.
$data = json_encode($result, true); echo $data;
-
==============================
14.다음과 같이 문자열을 JSON으로 변경할 수 있으며 원하는 경우 문자열을 잘라내어 제거 할 수도 있습니다.
다음과 같이 문자열을 JSON으로 변경할 수 있으며 원하는 경우 문자열을 잘라내어 제거 할 수도 있습니다.
$str = '[{"id":1, "value":"Comfort Stretch"}]'; //here is JSON object $filters = json_decode($str); foreach($filters as $obj){ $filter_id[] = $obj->id; } //here is your array from that JSON $filter_id;
-
==============================
15.
$data='{"resultList":[{"id":"1839","displayName":"Analytics","subLine":""},{"id":"1015","displayName":"Automation","subLine":""},{"id":"1084","displayName":"Aviation","subLine":""},{"id":"554","displayName":"Apparel","subLine":""},{"id":"875","displayName":"Aerospace","subLine":""},{"id":"1990","displayName":"Account Reconciliation","subLine":""},{"id":"3657","displayName":"Android","subLine":""},{"id":"1262","displayName":"Apache","subLine":""},{"id":"1440","displayName":"Acting","subLine":""},{"id":"710","displayName":"Aircraft","subLine":""},{"id":"12187","displayName":"AAC","subLine":""}, {"id":"20365","displayName":"AAT","subLine":""}, {"id":"7849","displayName":"AAP","subLine":""}, {"id":"20511","displayName":"AACR2","subLine":""}, {"id":"28585","displayName":"AASHTO","subLine":""}, {"id":"45191","displayName":"AAMS","subLine":""}]}'; $b=json_decode($data); $i=0; while($b->{'resultList'}[$i]) { print_r($b->{'resultList'}[$i]->{'displayName'}); echo "<br />"; $i++; }
from https://stackoverflow.com/questions/7511821/how-to-convert-json-string-to-array by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
체크 박스가 true 일 때 행을 강조 표시하십시오. (0) | 2018.09.08 |
---|---|
PHP의 DateTime 클래스에서 DateTime-> date에 액세스 할 수없는 이유는 무엇입니까? 그게 버그 야? (0) | 2018.09.08 |
PHP에서 POST를 통해 동일한 이름을 가진 다중 입력 (0) | 2018.09.08 |
MySQL 트리거에서 PHP 스크립트 호출하기 (0) | 2018.09.08 |
codeigniter의 경로에서 "index.php"를 제거하는 법 (0) | 2018.09.08 |