如何在JavaScript Flask中读取JSON文件

时间:2019-04-29 09:42:07

标签: javascript json d3.js flask

我正在使用d3.js使用flask在地图上显示我们的数据。我正在尝试使用此@app.route('/', methods=['POST' ])在此处获取world.json文件,但它给出的错误为127.0.0.1--[29 / Apr / 2019 14:33:40]“ POST / HTTP / 1.1” 200-和 127.0.0.1--[29 / Apr / 2019 14:33:41]“ GET /world.json HTTP / 1.1” 404-。我已经将world.json文件存储在临时文件夹中。

import io
import csv
import pandas as pd
import numpy as np
from flask_googlemaps import GoogleMaps
from flask_googlemaps import Map,icons
import folium
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity

########################################################################################################3

#from __future__ import division
import string
import math
import pandas

def kuch(doc_headline):
    import os
    import pandas as pd
    import numpy as np
    from nltk.tokenize import word_tokenize
    from gensim import corpora, models, similarities

    # This one is good when files of news corpus dict matrix are already generated and we are using notebook
    # Use this saved matrix starategy in tfidf search in web app
    if (os.path.exists("adminWorkOutput/news.dict")):
        dictionary = corpora.Dictionary.load('adminWorkOutput/news.dict')
        corpus = corpora.MmCorpus('adminWorkOutput/news.mm')
        print("Already generated files are Used")
    else:
        print("Fresh run to generate saved dict matrix data ")

    tfidf = models.TfidfModel(corpus)
    corpus_tfidf = tfidf[corpus]

    # one
    # for doc in corpus_tfidf:
    #    print(doc)
    # two
    for doc in corpus_tfidf:
        doc = [(dictionary.get(idx), tfidf) for idx, tfidf in doc]
        #print(doc)

    # one way
    index = similarities.MatrixSimilarity(corpus_tfidf)
    # print(np.array(index))

    print("\nxxxxxxxxxxxxxxxxxxxxxxxx Similarities \n")

    # other way
    sims = similarities.Similarity('adminWorkOutput/', corpus_tfidf,
                                   num_features=len(dictionary))
    #print(sims)
    # print(type(sims))

    # documents[819] means news_820
    # because array start from 0 and news start from 1
    qry = doc_headline  # str(documents[819])
    print(qry)
    query_doc = [w.lower() for w in word_tokenize(qry)]
    # print(query_doc)
    query_doc_bow = dictionary.doc2bow(query_doc)
    # print(query_doc_bow)
    query_doc_tf_idf = tfidf[query_doc_bow]
    # print(query_doc_tf_idf)
    print("\nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n")
    my_result = sims[query_doc_tf_idf]
    #print(my_result)

    # print(list(enumerate(my_result)))
    arr = sorted(enumerate(my_result), key=lambda item: -item[1])

    print('this is there\n', arr[1])
    df = pd.read_csv('adminWorkOutput/preprocessed.csv')
    #print(df.loc[arr[1][0], 'topic'])

    records = []
    i = 0
    import random
    while (arr[i][1] > 0.1):
        topic1 = df.loc[arr[i][0], 'headline']
        country1 = df.loc[arr[i][0], 'country']
        similarity_score1 = arr[i][1]
        polarity_score1 = random.uniform(-1, 1)
        records.append((topic1, country1, similarity_score1, polarity_score1))
        i += 1

    df1 = pd.DataFrame(records, columns=['topic', 'country', 'similarity_score', 'polarity_score'])

    df1.to_csv('adminWorkOutput/similar.csv')

    import csv, json
    csvFilePath = "adminWorkOutput/similar.csv"
    jsonFilePath = "adminWorkOutput/file.json"
    arr = []
    # read the csv and add the arr to a arrayn

    with open(csvFilePath) as csvFile:
        csvReader = csv.DictReader(csvFile)
        print(csvReader)
        for csvRow in csvReader:
            arr.append(csvRow)
        # arr = {'Countries': arr} # Added line

    #print(arr)

    # write the data to a json file
    with open(jsonFilePath, "w") as jsonFile:
        jsonFile.write(json.dumps(arr, indent=4))


app = Flask(__name__, static_url_path = "/tmp", static_folder = "tmp")



@app.route('/')
def my_form():
    return render_template('myform2.html')




@app.route('/', methods=['POST' ])
def my_form_post():
    text = request.form['search']

    #processed_text = text.upper()
    print(text)
    kuch(text)
    print("sahi ha")
    return render_template('GeoMap/index.html')


import os
if __name__ == "__main__":
    app.run()

2 个答案:

答案 0 :(得分:1)

您的代码中没有任何内容映射到路由GET /world.json

可以从static_folder获得static_url_path文件,请尝试GET /tmp/world.json

检出Flask tutorial,尤其是静态文件部分。

答案 1 :(得分:1)

您忘记提供模板GeoMap/index.html的内容,其中包含对world.json文件的访问。通常,您应该使用url_for来访问文件。在您的情况下,您将Flask应用定义为

app = Flask(__name__, static_url_path="/tmp", static_folder="tmp")

您的模板中应包含以下内容:

{{ url_for('static', filename='world.json') }}

因此,这将导致对/tmp/world.json URL的请求。现在,这取决于您的意思。我已将world.json文件存储在临时文件夹中。在Linux / UNIX系统上,临时文件夹通常为/tmp,但是在您的应用程序定义中,您提供了tmp,这意味着相对于项目目录的tmp文件夹。也许您想设置static_folder="/tmp"吗?