복붙노트

JSON 문자열을 배열로 변환하는 방법

PHP

JSON 문자열을 배열로 변환하는 방법

제가하고 싶은 것은 다음과 같습니다 :

이 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. ==============================

    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. ==============================

    2.이 시도:

    이 시도:

    $data = json_decode($your_json_string, TRUE);
    

    두 번째 매개 변수는 디코딩 된 json 문자열을 연관 배열로 만듭니다.

  3. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    7.JSON 파일이나 구조체를 모든 중첩 수준의 PHP 스타일 배열로 변환해야하는 경우이 함수를 사용할 수 있습니다. 먼저 json_decode ($ yourJSONdata)를 수행 한 다음이 함수에 전달해야합니다. 올바른 PHP 스타일 배열을 브라우저 창 (또는 콘솔)에 출력합니다.

    JSON 파일이나 구조체를 모든 중첩 수준의 PHP 스타일 배열로 변환해야하는 경우이 함수를 사용할 수 있습니다. 먼저 json_decode ($ yourJSONdata)를 수행 한 다음이 함수에 전달해야합니다. 올바른 PHP 스타일 배열을 브라우저 창 (또는 콘솔)에 출력합니다.

    https://github.com/mobsted/jsontophparray

  8. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    12.문자열이 다음과 같은 JSON 형식으로되어 있는지 확인하십시오.

    문자열이 다음과 같은 JSON 형식으로되어 있는지 확인하십시오.

    {"result":"success","testid":"1"} (with " ") .
    

    그렇지 않다면 요청 매개 변수에 "responsetype => json"을 추가 할 수 있습니다.

    그런 다음 json_decode ($ response, true)를 사용하여 배열로 변환하십시오.

  13. ==============================

    13.

    $data = json_encode($result, true);
    
    echo $data;
    
  14. ==============================

    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. ==============================

    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++;
    }
    
  16. from https://stackoverflow.com/questions/7511821/how-to-convert-json-string-to-array by cc-by-sa and MIT license