Team-PastQuiz11 / PastQuiz

1 stars 0 forks source link

jsonファイルを出力するノウハウ #32

Open TakeRai opened 1 year ago

TakeRai commented 1 year ago

https://kuwk.jp/blog/spreadsheet2json/ スプレッドシートをjson変換

json出力のサンプルコード

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart' show rootBundle;

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _jsonData = "Loading...";

  @override
  void initState() {
    super.initState();
    _loadJsonData();
  }

  _loadJsonData() async {
    String jsonString = await rootBundle.loadString('assets/sample.json');
    final jsonResponse = json.decode(jsonString);
    setState(() {
      _jsonData = jsonResponse['data'];
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text(_jsonData),
      ),
    );
  }
}
TakeRai commented 1 year ago

json出力を想定したスプレッドシート作成を行う必要性があります。

TakeRai commented 1 year ago

@k-saito-en

GASでjsonファイル作るみたいなタスクの方で、分からないところあれば是非ご共有ください。 今の進捗等教えていただけると助かります。

tora-muscle commented 1 year ago

@TakeRai slack DMより転記

こちら現時点で未対応です。。。:おじぎ: 本日昼頃に少し時間をとって対応開始予定です。 1/23(月)対応予定 issue作成 参考文献の整理、学習 +α GAS構築開始

現時点で

issue作成

→こちらのissueで今後対応しようと思います。

参考文献の整理、学習

→移動時間に文献を読む程度で止まっております。

明日まとまった時間が取れそうですので「GASを触る」くらいまで作業を進める予定です。

tora-muscle commented 1 year ago

1 / 28 / 2023 作業報告

🎫 関連課題

✨ やったこと

追加

🚩 やらなかったこと

✅ 動作確認

スクリーンショット 2023-01-26 10 50 36

▼ 出力されたJSON

[
    {
        "mondai_id": "20190217",
        "year": 2019,
        "year_q": 17,
        "season": "秋",
        "category": "ストラテジ",
        "category_detail": "経営戦略マネジメント",
        "q_statement": "イノベーションのジレンマに関する記述として,最も適切なものはどれか。",
        "q_imagePath": "",
        "q_explan": "イノベーションのジレンマ",
        "": "イノベーションのジレンマとは、イノベーション分野における理論の1つで、イノベーションを普及させトップに立った先行企業が、真の顧客ニーズを軽視して成功した製品の改良に注力しすぎた結果、破壊的イノベーションを武器にする後続企業にシェアを奪われてしまう現象のことをいいます。",
        "choice_text": "最初に商品を消費したときに感じた価値や満足度が,消費する量が増えるに従い,徐々に低下していく現象",
        "choice_imagePath": ""
    },
    {
        "mondai_id": "20180109",
        "year": 2018,
        "year_q": 9,
        "season": "春",
        "category": "テクノロジ",
        "category_detail": "",
        "q_statement": "",
        "q_imagePath": "",
        "q_explan": "",
        "": "",
        "choice_text": "",
        "choice_imagePath": ""
    },
    {
        "mondai_id": "20150101",
        "year": 2015,
        "year_q": 1,
        "season": "春",
        "category": "",
        "category_detail": "",
        "q_statement": "",
        "q_imagePath": "",
        "q_explan": "",
        "": "",
        "choice_text": "",
        "choice_imagePath": ""
    },

🙏 引き継ぎ内容

@asahaya さん

@TakeRai. さん

👀 備考

tora-muscle commented 1 year ago

🗒 作業メモ

tora-muscle commented 1 year ago

1 / 30 / 2023 作業報告

✨ やったこと

▼toJson.gs ```javascript function toJSON() { //ダイヤログテンプレート読み込み var dl_html = HtmlService.createTemplateFromFile("dl_dialog").evaluate(); //ダイヤログ表示 SpreadsheetApp.getUi().showModalDialog(dl_html, "JSONファイルをダウンロード"); } function getData() { var sheet = SpreadsheetApp.getActiveSheet(); var data = sheet.getDataRange().getValues(); var titleColumns = data[0]; var iyear = titleColumns.indexOf('year'); var iyear_question = titleColumns.indexOf('year_question'); var iseason = titleColumns.indexOf('season'); var icategory = titleColumns.indexOf('category'); var icategory_Detail = titleColumns.indexOf('category_Detail'); var iq_statement = titleColumns.indexOf('q_statement'); var ichoices = titleColumns.indexOf('choices'); var ianswer_text = titleColumns.indexOf('answer_text'); var ijudge = titleColumns.indexOf('judge'); // JSON形式配列 var dataArray = []; var dataDic = {}; for(var i = 1; i < data.length; i++) { var rowData = data[i]; var key = rowData[iyear] + '|' + rowData[iyear_question] + '|' + rowData[iseason] + '|' + rowData[icategory] + '|' + rowData[icategory_Detail] + '|' + rowData[iq_statement]; for(var j = 0; j < 3; j++) { dataArray[dataDic[key]]['${j}'].push( { '${j}':[ {'answer_text' : rowData[ianswer_text]}, {'judge' : rowData[ijudge]} ] } ); } } return dataArray; } //スプレッドシート読み込み時に実行 function onOpen() { //メニューバーにJSON出力用メニューを追加 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var entries = [{ name : "JSONで出力", functionName : "toJSON" }]; spreadsheet.addMenu("JSON", entries); }; ```
▼期待されているJSON出力 ```javascript { 'year':2022, 'year_question':1, 'season': 0, 'category': 0, 'category_Detail': 0, 'q_statement':''' 著作権及び特許権に関する記述a~cのうち,適切なものだけを全て挙げたものはどれか。 a 偶然二つの同じようなものが生み出された場合, 発明に伴う特許権は両方に認められるが, 著作権は一方の著作者にだけ認められる。 b ソフトウェアの場合, 特許権も著作権もソースプログラムリストに対して認められる。 c 特許権の取得には出願と登録が必要だが, 著作権は出願や登録の必要はない。 ''', 'choices':{ 0:{ 'answer_text': 'a,b', 'judge' : false }, 1:{ 'answer_text': 'b', 'judge' : false }, 2:{ 'answer_text': 'b,c', 'judge' : false }, 3:{ 'answer_text': 'c', 'judge' : true }, } }; ```

🚩 やらなかったこと

✅ 動作確認

🙏 引き継ぎ内容

@TakeRai

tora-muscle commented 1 year ago

2 / 1 / 2023 作業報告

✨ やったこと

想定JSON出力 ```javascript { 'year':2022, 'year_question':1, 'season': 0, 'category': 0, 'category_Detail': 0, 'q_statement':''' 著作権及び特許権に関する記述a~cのうち,適切なものだけを全て挙げたものはどれか。 a 偶然二つの同じようなものが生み出された場合, 発明に伴う特許権は両方に認められるが, 著作権は一方の著作者にだけ認められる。 b ソフトウェアの場合, 特許権も著作権もソースプログラムリストに対して認められる。 c 特許権の取得には出願と登録が必要だが, 著作権は出願や登録の必要はない。 ''', 'choices':{ 0:{ 'answer_text': 'a,b', 'judge' : false }, 1:{ 'answer_text': 'b', 'judge' : false }, 2:{ 'answer_text': 'b,c', 'judge' : false }, 3:{ 'answer_text': 'c', 'judge' : true }, } }; ```

🚩 やらなかったこと

👍 できるようになったこと(ユーザー目線)

👎 できなくなったこと(ユーザー目線)

✅ 動作確認

https://user-images.githubusercontent.com/111550856/215917603-9a530805-c552-42d9-a96c-26921ab37909.mp4

出力された`pastQuestion.json` ```javascript { "2019": { "17": { "year": 2019, "year_question": 17, "season": "秋", "category": "ストラテジ", "category_Detail": "経営戦略マネジメント", "q_statement": "イノベーションのジレンマに関する記述として,最も適切なものはどれか。", "choices": { "1": { "answer_text": "最初に商品を消費したときに感じた価値や満足度が,消費する量が増えるに従い,徐々に低下していく現象", "judge": " false" }, "2": { "answer_text": "自社の既存商品がシェアを占めている市場に,自社の新商品を導入することで,既存商品のシェアを奪ってしまう現象", "judge": " false" }, "3": { "answer_text": "全売上の大部分を,少数の顧客が占めている状態", "judge": " false" }, "4": { "answer_text": "優良な大企業が,革新的な技術の追求よりも,既存技術の向上でシェアを確保することに注力してしまい,結果的に市場でのシェアの確保に失敗する現象", "judge": " true" } } } }, "year": { "year_question": { "year": "year", "year_question": "year_question", "season": "season", "category": "category", "category_Detail": "category_Detail", "q_statement": "q_statement", "choices": { "0": { "answer_text": "answer_text", "judge": "judge" } } } } } ```

👀 備考

➕ 追加対応

修正後出力JSON ```javascript { "2019": { "17": { "year": 2019, "year_question": 17, "season": "秋", "category": "ストラテジ", "category_Detail": "経営戦略マネジメント", "q_statement": "イノベーションのジレンマに関する記述として,最も適切なものはどれか。", "choices": { "0": { "answer_text": "最初に商品を消費したときに感じた価値や満足度が,消費する量が増えるに従い,徐々に低下していく現象", "judge": " false" }, "1": { "answer_text": "自社の既存商品がシェアを占めている市場に,自社の新商品を導入することで,既存商品のシェアを奪ってしまう現象", "judge": " false" }, "2": { "answer_text": "全売上の大部分を,少数の顧客が占めている状態", "judge": " false" }, "3": { "answer_text": "優良な大企業が,革新的な技術の追求よりも,既存技術の向上でシェアを確保することに注力してしまい,結果的に市場でのシェアの確保に失敗する現象", "judge": " true" } } } }, "year": { "year_question": { "year": "year", "year_question": "year_question", "season": "season", "category": "category", "category_Detail": "category_Detail", "q_statement": "q_statement", "choices": { "-1": { "answer_text": "answer_text", "judge": "judge" } } } } } ```
TakeRai commented 1 year ago

ありがとうございます!