You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery解析Flask后端JSON并自定义格式化显示求助

实现思路与代码示例

我来帮你梳理一下如何用jQuery从Flask后端获取Yummly API的JSON数据,并实现你需要的所有展示、自定义操作功能——刚好我之前做过类似的对接项目,直接上干货:

1. Flask后端处理Yummly API并返回JSON

首先后端要正确调用Yummly API,把拿到的结果原封不动(或按需预处理)转成JSON返回给前端。假设你已经有Yummly的API密钥和APP ID,示例代码如下:

from flask import Flask, jsonify
import requests

app = Flask(__name__)

# 替换成你的Yummly凭证
YUMMLY_API_KEY = "你的API密钥"
YUMMLY_APP_ID = "你的APP ID"
YUMMLY_BASE_URL = "https://api.yummly.com/v1/api/recipes"

@app.route('/get-yummly-data')
def get_yummly_data():
    # 这里可以自定义搜索参数,比如搜"chicken"
    request_params = {
        "q": "chicken",
        "app_id": YUMMLY_APP_ID,
        "app_key": YUMMLY_API_KEY
    }
    # 调用Yummly API
    yummly_response = requests.get(YUMMLY_BASE_URL, params=request_params)
    # 把结果转成Flask的JSON响应返回给前端
    return jsonify(yummly_response.json())

if __name__ == '__main__':
    app.run(debug=True)

2. 前端jQuery实现JSON展示与自定义操作

接下来前端用jQuery获取数据,同时实现易读格式化、单独访问字段、自定义清理、独立区块展示这些功能,代码里加了详细注释:

<!DOCTYPE html>
<html>
<head>
    <title>Yummly JSON Viewer</title>
    <script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
    <style>
        .main-container { margin: 20px; }
        .json-display { padding: 15px; border: 1px solid #eee; border-radius: 6px; margin: 10px 0; }
        .action-btn { padding: 8px 14px; margin: 5px; cursor: pointer; border: none; border-radius: 4px; background: #2563eb; color: white; }
        .selected-block { margin-top: 20px; padding: 12px; background: #f8fafc; border-left: 4px solid #2563eb; border-radius: 0 4px 4px 0; }
        pre { white-space: pre-wrap; word-wrap: break-word; }
    </style>
</head>
<body>
    <div class="main-container">
        <h1>Yummly 食谱数据浏览器</h1>
        <button class="action-btn" id="fetch-data-btn">获取Yummly数据</button>
        
        <!-- 完整JSON展示区 -->
        <div class="json-display" id="full-json-area"></div>
        
        <!-- 自定义操作按钮容器(动态生成) -->
        <div id="action-buttons"></div>
        
        <!-- 选定内容独立展示区 -->
        <div id="selected-content"></div>
    </div>

    <script>
        $(document).ready(function() {
            // 存储完整的JSON数据,方便后续操作
            let rawJsonData = null;

            // 点击按钮获取后端数据
            $('#fetch-data-btn').click(function() {
                $.get('/get-yummly-data', function(data) {
                    rawJsonData = data;
                    // 格式化并展示完整JSON
                    displayFullJson(data);
                    // 生成自定义操作按钮
                    generateCustomButtons();
                }).fail(function(err) {
                    alert('数据获取失败:' + err.statusText);
                });
            });

            // 格式化展示完整JSON
            function displayFullJson(data) {
                // JSON.stringify的第二个参数为null,第三个参数是缩进空格数,实现易读格式
                const formattedJson = JSON.stringify(data, null, 2);
                $('#full-json-area').html(`<h3>完整JSON数据</h3><pre>${formattedJson}</pre>`);
            }

            // 生成自定义操作按钮
            function generateCustomButtons() {
                const btnGroup = $('<div></div>');
                // 按钮1:查看总匹配食谱数
                btnGroup.append('<button class="action-btn" id="show-total">显示总食谱数</button>');
                // 按钮2:查看所有食谱条目
                btnGroup.append('<button class="action-btn" id="show-recipes">显示食谱列表</button>');
                // 按钮3:清理冗余字段(比如移除attribution、facetCounts)
                btnGroup.append('<button class="action-btn" id="clean-json">清理冗余数据</button>');
                $('#action-buttons').html(btnGroup);
            }

            // 单独访问JSON字段并展示
            $(document).on('click', '#show-total', function() {
                if (rawJsonData) {
                    const totalCount = rawJsonData.totalMatchCount;
                    addSelectedBlock('总食谱匹配数', `<p>共找到 <strong>${totalCount}</strong> 条符合条件的食谱</p>`);
                }
            });

            $(document).on('click', '#show-recipes', function() {
                if (rawJsonData && rawJsonData.matches) {
                    const formattedRecipes = JSON.stringify(rawJsonData.matches, null, 2);
                    addSelectedBlock('食谱匹配列表', `<pre>${formattedRecipes}</pre>`);
                }
            });

            // 自定义移除字段并展示
            $(document).on('click', '#clean-json', function() {
                if (rawJsonData) {
                    // 复制原数据,避免修改源对象
                    const cleanedData = {...rawJsonData};
                    // 移除不需要的字段,可根据需求调整
                    delete cleanedData.attribution;
                    delete cleanedData.facetCounts;
                    const cleanedJson = JSON.stringify(cleanedData, null, 2);
                    addSelectedBlock('清理后的JSON数据', `<pre>${cleanedJson}</pre>`);
                }
            });

            // 添加独立展示区块
            function addSelectedBlock(title, content) {
                const block = $(`
                    <div class="selected-block">
                        <h4>${title}</h4>
                        ${content}
                    </div>
                `);
                $('#selected-content').append(block);
            }
        });
    </script>
</body>
</html>

3. 核心功能说明

  • 易读展示:利用JSON.stringify(data, null, 2)给JSON添加缩进,配合<pre>标签保留格式,让层级结构一目了然。
  • 单独访问JSON块/字段:通过直接访问rawJsonData的属性(比如rawJsonData.totalMatchCount、rawJsonData.matches)提取特定内容,再单独展示。
  • 自定义移除/格式化:通过复制原JSON对象(避免污染源数据),用delete操作符移除冗余字段;如果需要格式化特定字段(比如烹饪时间、食材列表),可以遍历数组做针对性处理。
  • 独立区块展示:封装addSelectedBlock函数,把选定内容生成带标题的独立区块,追加到指定区域,方便集中查看。

4. 扩展建议

  • 可以给每个食谱条目添加点击事件,单独展示该条目的详细食材、烹饪步骤等信息。
  • 添加搜索框,让用户自定义Yummly的搜索关键词,传递给后端动态获取数据。
  • 给格式化后的JSON添加语法高亮(比如用highlight.js),进一步提升可读性。

内容的提问来源于stack exchange,提问作者Rafal Hejnicki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:18:58