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

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

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

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

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

1581閲覧

jsonのデータをphpに移行しjsで出力したい

MeB

総合スコア104

JSON

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

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1グッド

0クリップ

投稿2018/07/17 05:01

編集2018/07/17 06:38

前提・実現したいこと

現状jsonのデータをjsで読み込み、htmlでページに出力しているのですが、
この状態だとjsonの中のデータが見れてしまうため(urlで直接アクセスなど)
データを丸ごとそのままの形でphp内に記述しjsで出力したいです。

該当のソースコード

json

1{ 2 "test":[ 3 { 4 "id": 1, 5 "type":"aaa", 6 "color":"red" 7 }, 8 { 9 "id": 2, 10 "type":"aaa", 11 "color":"blue" 12 }, 13 { 14 "id": 3, 15 "type":"bbb", 16 "color":"blue" 17 } 18 ] 19}

js

1 $.ajax({ 2 url: '/json/data.json', 3 type: "POST", 4 success: function(data){ 5 var dataArray = data.test; 6 console.log(dataArray);

としていて、dataArrayの中は

(5) [{…}, {…}, {…}, {…}, {…}] 0:{"id": 1,"type":"aaa","color":"red", …} 1:{"id": 2,"type":"aaa","color":"blue", …} 2:{"id": 3,"type":"bbb","color":"blue", …} length:3 __proto__:Array(0)

のようになっています。
Chromeのデバロッパーツールのコンソールで確認してます。

phpにデータを記述し、
上記のdataArrayと同じ状態でjsで出力するにはどのように記述したらよろしいでのでしょうか?
ご教示よろしくおねがいします。

追記
ちょっと穴はあるのですが、
ひとまずjsonファイルをphpで読み込む形にしました。

php

1<?php 2$url = "json/data.json"; 3$json = file_get_contents($url); 4$json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); 5$arr = json_decode($json,true); 6var_dump($arr); 7 ?>

このような感じで$arrにデータは入れました。

しかし、当たり前ですが下記でうまくdataArrayに入れることができない状態です。

js

1 $.ajax({ 2 url: '/json/data.json', 3 type: "POST", 4 success: function(data){ 5 var dataArray = data.test; 6 console.log(dataArray);

どのようにしてdataArrayに$arrを入れるのでしょうか?

<?php echo $hoge; ?>;

のような形はそのままテキストとして出力されてしまいました。

i_sugiyama_tomo👍を押しています

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

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

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

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

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

m.ts10806

2018/07/17 05:03

「可能です」だけの回答で良いのでしょうか。 >dataArrayと同じ状態でjsで出力することは可能でしょうか?
m.ts10806

2018/07/17 05:04

「欲しい回答を得られる質問の仕方」を心がけてください。あと何も試してみていないようなので現時点では丸投げです。PHPでJSONを扱うことは幾らでもあるので調べれば幾らでも出てきますよ。
MeB

2018/07/17 05:05

失礼しました。記述もわからないためご教示願いたいです。修正いたします。
m.ts10806

2018/07/17 05:10

(2回目)あと何も試してみていないようなので現時点では丸投げです。PHPでJSONを扱うことは幾らでもあるので調べれば幾らでも出てきますよ。
i_sugiyama_tomo

2018/07/17 05:20

要件としては「jsonファイルのURLを見られたくない」「Javascriptの配列に先のjsonファイルの内容を代入したい」でよろしいですか?このままだとゴールが見えません
m.ts10806

2018/07/17 05:26

ajaxのレスポンスの値を開発ツールで拾うと見れますけど、それはいいんですかね。
MeB

2018/07/17 06:31

i_sugiyama_tomoさん はい。その通りです。
MeB

2018/07/17 06:32 編集

mts10806さん 丸投げの状態になってしま申し訳ございません。 現時点のものを追記します。 また、レスポンスの値などはひとまずスルーでお願いします…。
og24715

2018/07/17 07:01 編集

確認ですが、暗号化まがいのことがしたいわけではなくて、データへの直アクセスを拒否できればよいのですか?
MeB

2018/07/17 07:02

og24715さん はい。その通りです。
guest

回答3

0

php

1<?php 2/** 3 * /json/data.php 4 */ 5header('Content-type: application/json'); 6 7echo <<<JSON 8{ 9 "test":[ 10 { 11 "id": 1, 12 "type":"aaa", 13 "color":"red" 14 }, 15 { 16 "id": 2, 17 "type":"aaa", 18 "color":"blue" 19 }, 20 { 21 "id": 3, 22 "type":"bbb", 23 "color":"blue" 24 } 25 ] 26} 27JSON;

javascript

1 $.ajax({ 2 url: '/json/data.php', 3 type: "POST", 4 success: function(data){ 5 var dataArray = data.test; 6 console.log(dataArray); 7 } 8 });

jsonの中のデータが見れてしまうため(urlで直接アクセスなど)

PHPで書いたところでみれるけど。

投稿2018/07/17 05:04

編集2018/07/17 05:06
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

既に回答が出ているやり方をJavaScript観点にしただけですが。

phpで正しいjson形式の文字列をechoしておいて、
dataType:jsonで受け取るだけです。

php

1<?php 2$url = "json/data.json"; 3$json = file_get_contents($url); 4$json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); 5echo $json;

js

1 $.ajax({ 2 url: 'hoge.php', 3 dataType: 'json', 4 type: "POST", 5 success: function(data){ 6 var dataArray = data.test; 7 console.log(dataArray);

わざわざjson_decode()する必要はありません。
ajaxでPHPから受け取れるのは基本文字列のみです。

いずれにしてもJavaScriptを使っている以上、ブラウザ開発ツールのレスポンスを見ればどのような内容になっているか分かるので、
例えjsonファイルをブラウザから参照できない箇所に置いてPHPから読み込んだとしても、「jsonの中のデータが見れないように」はできません。
PHPからJSON解析してHTML生成、出力した方が良いです。

投稿2018/07/17 06:51

m.ts10806

総合スコア80765

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

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

MeB

2018/07/17 07:03

ご回答ありがとうございます。 jsでやること自体が間違っていたのですね…。
m.ts10806

2018/07/17 07:05

要件次第です。全てが全て間違いとはいえません。 非公開としたいデータをJSONに持つのは設計としても微妙、ということですね。
guest

0

質問に対する回答は既についているのでおせっかいを焼くと、データを取得するのが目的の API のメソッドが POST ってちょっとやですね。 ブラウザから直アクセスされたくないのであれば GETメソッドの API に対して、リクエストヘッダーにトークン仕込まれてなければリクエストエラー返すとかのほうが正しい気がします。


ちなみにさすがに php に json まるごと書いて echo するようなことはまず無いと思ってて、外部に json を置いてそれを読む事になるかと思います。
今度はその json が直アクセスされないか、という問題が出てきますがその回答は以前の私の質問にありますので良ければ御覧ください。

PHP - ユーザーに直接アクセスされないようにしたい(20910)|teratail

投稿2018/07/17 05:20

og24715

総合スコア832

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

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

MeB

2018/07/17 06:33

ご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問