質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2920閲覧

JSONが受け取れない

退会済みユーザー

退会済みユーザー

総合スコア0

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1グッド

1クリップ

投稿2018/10/10 14:54

編集2018/10/11 01:13

Android開発をしています。

PHPから、IDだけJSONで送って
JavaでJSONを受け取るようにしているのですが、
なかなかできません。
これまで、何度か同じ様な処理を実装しているのですが
どうしてもidだけが取れないです。何が原因なのか、調べてもわかりません。
どこを修正すれば良いでしょうか...

以下がJSONをエンコードした形です。

json

1{ 2 "number": [ 3 { 4 "id": "10" 5 } 6 ] 7}

そして、下記がJavaのAsyncTaskのコードになります。

Java

1public class Get_IdTask extends AsyncTask<String, String, String> { 2 3 private Activity activity; 4 5 public Get_IdTask(Activity act){ 6 this.activity = act; 7 } 8 9 10 @Override 11 protected void onPreExecute(){ 12 super.onPreExecute(); 13 } 14 15 @Override 16 protected String doInBackground(String...parameter){ 17 String word = parameter[0]; 18 String urls = "JSONを取って来るURL"; 19 URL url = null; 20 HttpURLConnection connection = null; 21 OutputStream out = null; 22 StringBuilder response = new StringBuilder(); 23 24 try{ 25 url = new URL(urls); 26 connection = (HttpURLConnection)url.openConnection(); 27 connection.setRequestMethod("POST"); 28 connection.setDoOutput(true); 29 connection.setDoInput(true); 30 OutputStreamWriter outwriter = new OutputStreamWriter(connection.getOutputStream()); 31 outwriter.write("id="+word); 32 33 Log.d("LOGLOG",""+word); 34 35 outwriter.flush(); 36 connection.connect(); 37 38 int status = connection.getResponseCode(); 39 if(status == HttpURLConnection.HTTP_OK){ 40 InputStream in = connection.getInputStream(); 41 String encoding = connection.getContentEncoding(); 42 if(encoding == null){ 43 encoding = "UTF-8"; 44 } 45 InputStreamReader inreader = new InputStreamReader(in,encoding); 46 BufferedReader bufreader =new BufferedReader(inreader); 47 String line = null; 48 while((line = bufreader.readLine()) != null){ 49 response.append(line); 50 } 51 bufreader.close(); 52 inreader.close(); 53 in.close(); 54 55 }else{ 56 Log.d("LOGLOG",""+status); 57 } 58 59 }catch (IOException e){ 60 e.printStackTrace(); 61 }finally { 62 if(connection != null){ 63 connection.disconnect(); 64 } 65 } 66 67 return response.toString(); 68 } 69 70 @Override 71 protected void onPostExecute(String result) { 72 73 try{ 74 JSONObject rootJSON = new JSONObject(result); 75 JSONArray spotArray = rootJSON.getJSONArray("number"); 76 JSONObject detail = spotArray.getJSONObject(0); 77 String id = detail.getString("id"); 78 79 Intent intent = new Intent(activity, SecondActivity.class); 80 intent.putExtra("id",id); 81 82 activity.startActivity(intent); 83 84 85 }catch (JSONException e){ 86 Log.d("LOGLOG","Nullです。"); 87 e.printStackTrace(); 88 } 89 } 90} 91

Activityから、任意の文字列をAsyncTaskに渡し、
AsyncTaskからその文字列をPOSTでPHPに送っています。
そして、PHPではその文字を検索して
結果として、検索したレコードのIDを取り
idを違うActivityへ渡すということをしています。

どうしても、JSONExceptionが投げられ
"Nullです。" と、logには出てしまいます。

どこがおかしいのでしょうか。
AsyncTaskでJSONを受け取る実装は何度かしてきましたが
今回ばかりは、調べてもどこが原因なのか検討がつきません。

ご教示いただけましたら、幸いです。


補足です。

コメントをいただいて、resultの中を見て見ました。
resultの中は、以下のように書かれていました。

Log

1 Array( [0] => Array ( [id] => 10 )){"number":[{"id":"10"}]}

値は取れていることを確認できたので
あとはJSONのパースで失敗しているのだと思います。

この場合、"10"だけ取得するには、どのようにパースすれば良いのでしょうか。。。
しっかり開発を初めて3ヶ月くらいなので、簡単なことしかわからず。。。
申し訳ございませんが、ご教示のほどよろしくお願いいたします。


補足②

先ほど載せたresultの中身ですが

Log

1Array( [0] => Array ( [id] => 10 )) 2

この部分がいらないようです。
下記がphpです。

php

1 $str = $_POST["id"]; 2 3 $model = new ModelTest(); 4 $a = $model->getid($str); 5 print_r($a); 6 $count = count($a); 7 8 for ($i=0; $i < $count ; $i++) { 9 $search["number"][] = array( 10 "id" => $a[$i]['id'], 11 ); 12 } 13 14 header('Content-Type: application/json'); 15 echo json_encode($search);
yuji38kwmt👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

IshibashiTanaka

2018/10/10 15:34

PHP側は `header('Content-type: application/json; charset=UTF-8');` で `application/json` を返していますか?
yuji38kwmt

2018/10/10 15:51

JSONExceptionが発生しているということは、JSONのパースで失敗しているはずです。`{"id":"10}`のように単純なJSONから、本来読み込みたいJSONに変更していき、何が原因で失敗しているかを確認すると良いでしょう。
yuji38kwmt

2018/10/10 15:52

JSONException が発生している箇所と、変数resultの中身も教えていただけると、原因が分かるかもしれません。
退会済みユーザー

退会済みユーザー

2018/10/11 00:56

ご返答ありがとうございます。resultの中身をまだ見ていなかったのでlogを見て、投稿内容を修正いたします!
guest

回答1

0

ベストアンサー

php内の、「print_r($a); 」を削除したところ、うまくできました。

resultの値が以下になり、余計なものが消えました。
よって、うまくパースできました。

Log

1{"number":[{"id":"10"}]}

投稿2018/10/11 01:27

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問