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

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

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

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

JavaScript

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

Q&A

解決済

2回答

3468閲覧

javascript JSONファイルの日付範囲や時間範囲でのFilter抽出

退会済みユーザー

退会済みユーザー

総合スコア0

JSON

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

JavaScript

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

0グッド

0クリップ

投稿2021/05/20 00:39

編集2021/05/20 02:00

JSONファイルを日付範囲や時間範囲で絞り込み、抽出したいです。
JSONファイルのデータは以下のようになっています。

json

1[ 2 { 3 "id": 1, 4 "name": "あ", 5 "quote": "テストA", 6 "category": "情報", 7 "place_now": "家", 8 "time_extent": "23:00", 9 "date_extent": 0 10 }, 11 { 12 "id": 2, 13 "name": "い", 14 "quote": "テストB", 15 "category": "情報", 16 "place_now": "家", 17 "time_extent": "23:00~6:00", 18 "date_extent": 0 19 }, 20 { 21 "id": 3, 22 "name": "う", 23 "quote": "テストC", 24 "category": "情報", 25 "place_now": "家", 26 "time_extent": "7:00", 27 "date_extent": 0 28 }, 29 { 30 "id": 4, 31 "name": "え", 32 "quote": "テストD", 33 "category": "情報", 34 "place_now": "家", 35 "time_extent": 0, 36 "date_extent": 0 37 }, 38 { 39 "id": 5, 40 "name": "お", 41 "quote": "明けましておめでとう", 42 "category": "情報", 43 "place_now": "家", 44 "time_extent": 0, 45 "date_extent": "1/1" 46 }, 47 { 48 "id": 6, 49 "name": "か", 50 "quote": "バレンタインだ", 51 "category": "情報", 52 "place_now": "家", 53 "time_extent": 0, 54 "date_extent": "2/14" 55 }, 56 { 57 "id": 7, 58 "name": "き", 59 "quote": "クリスマスイブだ", 60 "category": "情報", 61 "place_now": "家", 62 "time_extent": 0, 63 "date_extent": "12/24" 64 }, 65 { 66 "id": 8, 67 "name": "く", 68 "quote": "クリスマスだ", 69 "category": "情報", 70 "place_now": "家", 71 "time_extent": 0, 72 "date_extent": "12/25" 73 }, 74 { 75 "id": 9, 76 "name": "け", 77 "quote": "眠い", 78 "category": "情報", 79 "place_now": "家", 80 "time_extent": "7:00~9:00", 81 "date_extent": 0 82 }, 83 { 84 "id": 10, 85 "name": "こ", 86 "quote": "", 87 "category": "情報", 88 "place_now": "家", 89 "time_extent": "12:00", 90 "date_extent": 0 91 } 92]

time_extent⇒時間
date_extent⇒日付

例えば、クリスマスの情報を知りたい場合は
date_extentで「12/25」で絞り込むような形です。

日付や時間にこだわらない情報の場合は「0」が入力されています。

現在の時刻が8:00だったとして、
time_extent:7:00~9:00 の項目…
範囲内の情報を取得するにはどのように組んだらいいのでしょうか。

データの表記にはとくにこだわっていないので
7:00~9:00と記載されているデータを >=7:00 && <=9:00 みたいに記載しても
問題ありません。

情報収集しつつ質問してました。
一応問題なく動作しそうなところまで確認できました。

js

1const array = [ 2 { 3 "id": 1, 4 "name": "あ", 5 "quote": "テストA", 6 "category": "情報", 7 "place_now": "家", 8 "time_extent": "23:00", 9 "date_extent": 0 10 }, 11 { 12 "id": 2, 13 "name": "い", 14 "quote": "テストB", 15 "category": "情報", 16 "place_now": "家", 17 "time_extent": "23:00~6:00", 18 "date_extent": 0 19 }, 20 { 21 "id": 3, 22 "name": "う", 23 "quote": "テストC", 24 "category": "情報", 25 "place_now": "家", 26 "time_extent": "7:00", 27 "date_extent": 0 28 }, 29 { 30 "id": 4, 31 "name": "え", 32 "quote": "テストD", 33 "category": "情報", 34 "place_now": "家", 35 "time_extent": 0, 36 "date_extent": 0 37 }, 38 { 39 "id": 5, 40 "name": "お", 41 "quote": "明けましておめでとう", 42 "category": "情報", 43 "place_now": "家", 44 "time_extent": 0, 45 "date_extent": "1/1" 46 }, 47 { 48 "id": 6, 49 "name": "か", 50 "quote": "バレンタインだ", 51 "category": "情報", 52 "place_now": "家", 53 "time_extent": 0, 54 "date_extent": "2/14" 55 }, 56 { 57 "id": 7, 58 "name": "き", 59 "quote": "クリスマスイブだ", 60 "category": "情報", 61 "place_now": "家", 62 "time_extent": 0, 63 "date_extent": "12/24" 64 }, 65 { 66 "id": 8, 67 "name": "く", 68 "quote": "クリスマスだ", 69 "category": "情報", 70 "place_now": "家", 71 "time_extent": 0, 72 "date_extent": "12/25" 73 }, 74 { 75 "id": 9, 76 "name": "け", 77 "quote": "眠い", 78 "category": "情報", 79 "place_now": "家", 80 "time_extent": "6:00<=7:00", 81 "date_extent": 0 82 }, 83 { 84 "id": 10, 85 "name": "こ", 86 "quote": "", 87 "category": "情報", 88 "place_now": "家", 89 "time_extent": "13:00", 90 "date_extent": 0 91 } 92] 93const test= array.filter(x => x.time_extent === '7:30') 94console.log(test) 95

ただ、「7:00~9:00」のものや
「23:00~6:00」をどうやって取得すれば良いか分かりません。
時間 範囲 取得 等で調べても、現在時刻で比較したりしてます。
今はダミーのデータなので「12:00」などきりの良い数字が多いですが
基本的には「11:30~12:30」など時刻範囲になる予定です。

元データ自体を「7:00<=9:00」のようにしても良いのかと思いましたが、
取得は出来ませんでした。

比較しやすくするために、時刻を数値で表すのも良いかと思ってます。
12時30分⇒12.5
0時30分⇒0.5
15時45分⇒15.75

https://www.tagindex.com/javascript/message/time2.html
上記サイトが参考になりそうでしたが、
データ側を時間範囲にしたいので少々違うと思っています。
データ自体に、7:00以上9:00以下などの範囲に設定できれば
私の実施したい事ができるのですが…。

JSでJSONを動的にフィルタしたい
https://teratail.com/questions/212715
上記が参考になりそうなので確認中です。
jsonのファイル自体に「開始時間」「終了時間」と指定しても良いかもしれません。

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

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

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

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

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

miyabi_takatsuk

2021/05/20 00:43

まず、自身でやってみたというソースコードはありませんか? コードがあれば、質問に記載してください。 自分でまだやってみてないのであれば、 本質問は丸投げになってしまいますので、まずは自身で挑戦してみましょう。
yambejp

2021/05/20 00:52

たとえば "time_extent": "12:00"のデータは 現時刻が12:00の瞬間しかヒットしないのでしょうか? 日またぎの処理は分けたほうが良いと思います
guest

回答2

0

ベストアンサー

開始時間、終了時間の列を分けることにしました。

投稿2021/06/01 00:06

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

時間については配列で持ち複数指定できるようにするとよいでしょう
[["9:00","10:00"],["12:00","20:00"]]
とくに指定しない場合は、フルでいれてください
[["0:00","23:59"]]

投稿2021/05/20 03:14

yambejp

総合スコア116734

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

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

退会済みユーザー

退会済みユーザー

2021/05/20 03:30

yambejp様 回答ありがとうございます。 jsonの元データに配列指定すれば良いという事だと思いますが それをどのように範囲内か確認すれば良いのでしょうか。 テストのjsonファイルは最低限にしました。 const array = [ { "id": 9, "name": "け", "quote": "眠い", "category": "情報", "place_now": "家", "time_extent": "9:30", "date_extent": 0 }, { "id": 10, "name": "こ", "quote": "", "category": "情報", "place_now": "家", "time_extent": [["9:31","9:59"],["12:00","20:00"]], "date_extent": 0 } ] const test= array.filter(x => x.time_extent>='9:00') testa= test.filter(x => x.time_extent<='10:00') console.log(test) console.log(testa) testのlogでは両方表示され testaのlogでは何も表示されません。 const test= array.filter(x => x.time_extent>='9:00' && x.time_extent<='10:00') 上記でもNGでした。 複数条件でのフィルターは難しいということでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問