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


123

내가 원하는 것은 다음과 같습니다.

  1. PHP의 텍스트 영역에서 JSON을 입력으로 가져 오기
  2. 이 입력을 사용하여 JSON으로 변환하고 php curl에 전달하여 요청을 보냅니다.

이 m은 api에서 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 문자열을 배열로 변환해야합니까 아니면 해당 데이터에서 URL을 위조 하시겠습니까? 질문이 정확히 무엇입니까?
Janis Veinbergs 2011 년

then it is not giving뭘주지? textarea에서 JSON 형식의 문자열을 가져 와서 JSON ???
PeeHaa 2011 년

1
내 질문 json_decode (, true)에서 위의 json을 수행하면 배열이 반환됩니까
XMen

@Pekka 내 질문을 다시 확인하십시오.
XMen

3
잘못된 json 문제는.
XMen 2011 년

답변:


187

게시물의 JSON을에 전달 json_decode하면 실패합니다. 유효한 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.

내 질문 json_decode (, true)에서 위의 json을 수행하면 배열이 반환됩니까
XMen

@RahulMehta PHP의 내장을 사용하는 경우 JSON이 유효하지 않은 경우 json_decode()반환 NULL됩니다 (예 : 인용 된 키 없음). 이것이 문서에 나와있는 내용이며 PHP 5.2 설치가 반환하는 내용입니다. 공식 내장 기능 이외의 기능을 사용하고 json_decode()있습니까? 무엇을 var_dump(json_decode($str, true));반환합니까?
RickN 2011 년

json_encoding 후 각 개별 json 객체 (예 : {foo : "bar"})를 배열의 객체로 읽고 싶습니다. 각 json 객체를 읽기 위해 json_encoded 데이터에서 배열을 어떻게 만들 수 있습니까? 안녕하세요.
Manny265

@ Manny265는 (1) 몇 가지 샘플 코드, (2) 지금까지 시도한 내용 및 (3) 예상되는 결과에 대한 자체 질문에 해당하는 것처럼 들립니다.
RickN

96

이 시도:

$data = json_decode($your_json_string, TRUE);

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


30

양식에서 JSON 문자열을 얻는 경우 사용 $_REQUEST, $_GET또는 $_POST당신이 기능을 사용해야합니다 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;

2
완벽합니다. $ _POST 함수 json_last_error ()에서 데이터를 가져올 때 = to JSON_ERROR_SYNTAX입니다. 그러나 모든 것이 좋았습니다. ascii 또는 utf8과 같은 인코딩 오류가 아닌 디코딩 오류였습니다. 감사합니다

11

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)
}

6

을 사용하여 URL에서 json 문자열을 얻는 경우 file_get_contents다음 단계를 따르십시오.

$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
                )

        )

)

2

json Object를 Array & String으로 변환 할 수 있습니다.

$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++;
}

1

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

https://github.com/mobsted/jsontophparray


1
<?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);

?>

나는 이것이 작동해야한다고 생각한다. 키가 숫자가 아니라면 큰 따옴표 안에 있어야한다는 것입니다.


1

이 내 솔루션 : json 문자열 $columns_validation = string(1736) "[{"colId":"N_ni","hide":true,"aggFunc":null,"width":136,"pivotIndex":null,"pinned":null,"rowGroupIndex":null},{"colId":"J_2_fait","hide":true,"aggFunc":null,"width":67,"pivotIndex":null,"pinned":null,"rowGroupIndex":null}]"

그래서 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 }

Thankz 형제 ... 당신이 내 하루 저장
Nuwan Withanage

1

문자열이 다음과 같은 JSON 형식인지 확인합니다.

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

그렇지 않은 경우 "responsetype => json"요청 매개 변수를 추가 할 수 있습니다 .

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


1
StackOverflow에 오신 것을 환영합니다. :-) 커뮤니티는 커뮤니티에 기여하고자하는 신규 회원을 항상 기쁘게 생각하며 귀하의 태도에 감사드립니다. 안타깝게도 다른 회원은 귀하의 답변이 반대표를받을 가치가 있다고 생각했습니다. 질문 자체가 약 7 년 전에 질문되었고 이미 여러 번 답변 되었기 때문일 수 있습니다. 또한 responseType속성은 요청에 대한 응답에서 데이터 유형을 결정하는 데 사용됩니다. 그러나 문제는 요청 본문에 자체적으로 정확하지 않은 데이터가 포함되어 있다는 것입니다. 따라서 귀하의 답변은 주어진 문맥에 맞지 않습니다.
Philipp Maurer

1

다음과 같이 문자열을 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;

0

이 변환기를 사용하면 전혀 실패하지 않습니다 : 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);

-2
$data = json_encode($result, true);

echo $data;

2
이 코드가 질문에 답할 수 있지만,이 코드가 질문에 답하는 이유 및 / 또는 방법에 대한 추가 컨텍스트를 제공하면 장기적인 가치가 향상됩니다.
rollstuhlfahrer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.