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

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

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

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

PHP

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

3回答

1534閲覧

JSON.parseしても配列の形式にならない

dakarakarad

総合スコア17

JSON

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

PHP

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2019/02/12 21:00

###実現したいこと
WordPressのタグ入力でオートコンプリートを付けたいです。
ゴールはこのような感じです。
https://jsfiddle.net/xrv2egta/

###問題
このゴールを目指して後述する「該当のソースコード」を書きました。

大体は出来たのですが、JSON.parseしても配列の形式にならない点が問題です。と言いますのは、

上記でゴールとしたJSfiddleの配列はこうですが、

javascript

1 var wordlist = [ 2 "あいうえお", 3 "かきくけこ", 4 "さしすせそ", 5 ];

しかし後述する該当のソースコードではこうなってしまうんです。

javascript

1 var wordlist = JSON.parse('[ 2 "あいうえお", 3 "かきくけこ", 4 "さしすせそ", 5 ]');

このように、「JSON.parseされたもの」と「オートコンプリートで使うためのもの」とが違う形になってしまうところで躓いています。

どうしたら同じになるでしょうか?
###該当のソースコード
index.phpにこのような内容を書いています。あとは配列の形だけできればゴールだと思うのですが、どうしてもできません。

php

1<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> 2<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css"> 3 4<input type="text" id="hogehoge" class="ui-autocomplete-input" autocomplete="off"> 5 6<?php 7// 上位100件のスラッグを、あいうえお順に取得 8$terms_args = array( 'number' => 100, 'orderby' => 'count', 'order' => 'DESC' ); 9$terms_all = get_terms( 'my_tag', $terms_args ); 10$terms_arr = array(); 11if( !empty( $terms_all ) && !is_wp_error( $terms_all ) ): 12 foreach( $terms_all as $term ) : 13 array_push( $terms_arr, $term->name ); 14 endforeach; 15endif; 16$terms_json = json_encode( $terms_arr, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES ) ; 17?> 18 19<script> 20// オートコンプリート機能を実装する 21(function($){ 22 // JSON.parseを使って配列を受け取る 23 var test = JSON.parse('<?php echo $terms_json; ?>'); 24 // 配列を使ってオ―とコンプリートを表示する 25 $( "#hogehoge" ).autocomplete({ 26 source: test 27 }); 28})(jQuery); 29</script>

こちらのソースコードでは、JSON.parseされたvar test の中身が、オートコンプリートに使える形の配列になってくれないわけです。

これはどのようにすれば正しい配列になるのでしょうか?

長々とすみません。どなたか解決策が分かる方がいらっしゃいましたら教えて頂けませんでしょうか?
どうぞ宜しくお願い致します。

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

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

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

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

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

maisumakun

2019/02/12 22:06

具体的に、「var test の中身」はどのような形になっていますか?
Lhankor_Mhy

2019/02/13 00:20

JSON.parse しない、という方法はダメなんでしょうか。
x_x

2019/02/13 01:37

末尾にカンマがあるということですか?
dakarakarad

2019/02/13 11:46

みなさまありがとうございます。yambejpさまのご回答で思うような配列ができました。
guest

回答3

0

さしあたり、JavaScriptの文字列リテラル中に改行は入れられないので、以下の行を…

$terms_json = json_encode( $terms_arr, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES ) ;

以下のように変更(JSON_PRETTY_PRINTを削除)すれば動くのではないでしょうか?

$terms_json = json_encode( $terms_arr, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES ) ;

投稿2019/02/12 23:19

ockeghem

総合スコア11701

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

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

dakarakarad

2019/02/13 11:44

ありがとうございます。注意します。
guest

0

ベストアンサー

整形されたjsonデータはバックスラッシュで囲んでください

javascript

1<?PHP 2$terms_json=json_encode([ 3 "あいうえお", 4 "かきくけこ", 5 "さしすせそ", 6 ],JSON_UNESCAPED_UNICODE| JSON_PRETTY_PRINT ); 7?> 8<script> 9var text=`<?=$terms_json?>`; 10console.log(text); 11var wordlist = JSON.parse(text); 12console.log(wordlist); 13</script>

ただしJSONデータの最後データの後ろにカンマは入れられません

投稿2019/02/13 01:49

yambejp

総合スコア114777

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

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

dakarakarad

2019/02/13 11:44

ありがとうございます。思うような配列になりました。
ockeghem

2019/02/13 11:58

バックスラッシュではなく、バッククォートですよね。 バッククォート(テンプレートリテラル)はIE11では動かないので、IE11が対象であれば別の方法を考える必要があります。
guest

0

JSON(JavaScript Object Notation)はそのままJavaScriptのコードなので、

php

1var test = <?php echo $terms_json; ?>;

とすれば動きそうですが、 JSON.parse を使うことが必須の課題なのでしょうか?
ただし、実際に使うときは自分で発行したJSONデータのみが $terms_json に入るように(任意のコードが挿入されないように)気をつけてください。

投稿2019/02/13 01:52

mather

総合スコア6753

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

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

dakarakarad

2019/02/13 11:45

ありがとうございます。JSON.parseの意味をよくわかっておりませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問