후루
71
2019-11-08 10:01:08
9
197

PHP 에서 Json 파싱하는 방법 질문 드립니다.


안녕하세요.


안드로이드에서 json 배열을 php 로 보내서 php에서 파싱해서 db 로 insert 하려고 합니다.


1. 안드로이드

nameValuePairs.add(new BasicNameValuePair("catch_seq", catchSeq));
nameValuePairs.add(new BasicNameValuePair("user_seq", userSeq));
nameValuePairs.add(new BasicNameValuePair("store_seq", storeSeq));
nameValuePairs.add(new BasicNameValuePair("json_arr", jsonArray.toString()));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));
// json to php


ResponseHandler<String> responseHandler = new BasicResponseHandler();

final String responsedata = httpclient.execute(httppost, responseHandler);
System.out.println(">>>>>>>>ConnectDB.selectToJson return : "+responsedata);

보내는 json data 는 [{"menu_name":"pizaa","menu_person":"2"}] 입니다.


2. php

        $store_seq = $_POST['store_seq'];
	$chatlist_jsonlist = json_decode($_POST['json_arr'],true);  //POST로 받은 값을 json형식으로 decode


1) foreach

foreach($chatlist_jsonlist as $row) {
		
		$menu_name = $row['menu_name'];
		$menu_person = $row['menu_person'];

		echo "catch_seq".$catch_seq."user_seq".$user_seq."store_seq".$store_seq."menu_name".$menu_name."menu_person".$menu_person;
                // data return test               
 
		$result = mysqli_query($con,"insert into CATCHED_MENU_LIST values ('$catch_seq','$menu_name','$menu_person','$user_seq','$store_seq')");
	
		if($result){
			
		}else{
		   mysqli_query($con,"DELETE FROM CATCHED_MENU_LIST WHERE catch_seq = '".$catch_seq. "'");
		   break;
		}
		
	}


혹은


2)for

	for($i = 0 ; $i < count($chatlist_jsonlist) ; $i++){

		//JSONArray에서 [$i] 번째 행의 JSONObject [' '] 항목의 값을 가져옴
		$menu_name = "'".$jsonarr[$i]['menu_name']."'";
		$menu_person = "'".$jsonarr[$i]['menu_person']."'";

		//테스트 출력
		echo "catch_seq".$catch_seq."user_seq".$user_seq."store_seq".$store_seq."menu_name".$menu_name."menu_person".$menu_person;
		
                $result = mysqli_query($con,"insert into CATCHED_MENU_LIST values ('$catch_seq','$menu_name','$menu_person','$user_seq','$store_seq')");
	
		if($result){
			
		}else{
		   mysqli_query($con,"DELETE FROM CATCHED_MENU_LIST WHERE catch_seq = '".$catch_seq. "'");
		   break;
		}
	}


현재 위 두 반복문속의 echo 도 실행 안되고 둘다 실행 안되고 건너뛰는 것 같습니다.

그래서 echo test 도 안나옵니다.


안드로이드에서 json 데이터를 보내서 php 에서 json parsing 하는 방법을 알 수 있을까요?ㅜ



0
0
  • 답변 9

  • 배고파서서러워요
    2k
    2019-11-08 10:09:44

    list 변수 자체는 제대로 array 형식으로 변환이 되어있나요?

    print_r로 데이터 찍어보시고, 변환 자체가 제대로 되어있는지부터 확인하셔야할듯.

    foreach의 경우에도 $row 먼저 print_r로 배열 출력 해보세요.

    json이라고 해봐야 형식 맞춘 string이라서 제대로 된 json 형식이라면 decode가 제대로 되어야합니다.

    0
  • 후루
    71
    2019-11-08 10:14:06

    배고파서서러워요 님


    JSONArray jsonArray = new JSONArray();
    JSONObject jsonObject;

    for(int i=0; i<name.length; i++){

    jsonObject = new JSONObject();
    jsonObject.put("menu_name",name[i]);
    jsonObject.put("menu_person",person[i]);
    jsonArray.put(jsonObject);

    } // 배열 값 json 세팅


    이것이 json array 세팅 부분입니다.


    보내는 String 은  [{"menu_name":"pizaa","menu_person":"2"}] 로

    구분 테그 없이 간단하게 보냈습니다ㅠ

    0
  • 배고파서서러워요
    2k
    2019-11-08 10:24:43

    $chatlist_jsonlist 변수를 일단 print_r로 배열이 제대로 출력되는지 확인해보세요.

    그리고 두번째 for문은 $chatlist_jsonlist[$i]로 뽑으셔야 합니다. 변수를 다른 변수 배열 찍고있는 듯?

    $chatlist_jsonlist 가 제대로 출력 되고, foreach에서 $row가 제대로 출력이 된다면 다른 곳에서 에러가 나고 있는겁니다.


    0
  • 후루
    71
    2019-11-08 10:33:37

    배고파서서러워요 님

    말씀하신대로 2번 포문은 수정했습니다. 감사합니다.


    말씀하신대로 

            $json_arr = $_POST['json_arr'];
            echo "json_arr".$json_arr;
    
            //  json_arr[{\"menu_name\":\"pizaa\",\"menu_person\":\"2\"}] 출력됨
            $chatlist_jsonlist = json_decode($json_arr,true); //POST로 받은 값을 json형식으로 decode echo "chatlist_jsonlist".print_r($chatlist_jsonlist);                  // chatlist_jsonlist1 출력됨 foreach($chatlist_jsonlist as $row) { $pt = print_r($row); echo $pt;                 // 이것은 출력 안됨. $menu_name = $row['menu_name']; $menu_person = $row['menu_person']; echo "catch_seq".$catch_seq."user_seq".$user_seq."store_seq".$store_seq."menu_name".$menu_name."menu_person".$menu_person; $result = mysqli_query($con,"insert into CATCHED_MENU_LIST values ('$catch_seq','$menu_name','$menu_person','$user_seq','$store_seq')"); if($result){ }else{ mysqli_query($con,"DELETE FROM CATCHED_MENU_LIST WHERE catch_seq = '".$catch_seq. "'"); break; } }


    이렇게 출력문 돌려보면

    json_arr[{\"menu_name\":\"pizaa\",\"menu_person\":\"2\"}]chatlist_jsonlist1failed

    라고 출력 됩니다.


    처음 json 배열 가져온 것을

    json_arr[{\"menu_name\":\"pizaa\",\"menu_person\":\"2\"}]

    로 출력하고


    decode 하면

    chatlist_jsonlist1

    로 출력 됩니다.


    여기까지 출력되고, print_r($row); 는 출력이 안됩니다..

    반복문을 안타는 느낌입니다.


    0
  • 배고파서서러워요
    2k
    2019-11-08 11:06:54

    출력 자체를 잘못하고 계십니다;;

    배열은 echo로 출력할 수 없습니다.

    그리고 print_r 자체가 출력인데, 변수에 담고 계십니다....

    print_r($row);

    exit;

    구문으로 체크해보세요-

    $chatlist_jsonlist 가 제대로 출력된다면 foreach도 정상적으로 출력되어야합니다.

    0
  • ISA
    1k
    2019-11-08 11:19:56

    Json decode..

    0
  • 후루
    71
    2019-11-08 12:08:38

    ISA 님


    json decode 후에 tag 로 파싱 하는 부분에서 막혀서 질문드렸습니다.

    답변 감사합니다.

    0
  • ISA
    1k
    2019-11-08 12:22:00
    뭐가 문제인지 정확히는 모르겠지만 
    ->로 접근해보세요 obj not as array
    0
  • ISA
    1k
    2019-11-08 12:23:46
    에러 내용을 모르니 모르겠습니다.. +위에 분이 말하신대로 foreach말고 for문을 돌려보시는게?
    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.