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

如何在应用UI中以列形式展示API返回的动态JSON错误信息

问题描述

我从API收到如下JSON数据,其中的键和值会随错误发生情况动态变化,请问如何在应用UI中将其以列的形式展示?

键和值会随错误的发生而变化。

示例JSON数据(已翻译为中文):

{"message":{"name":["姓名字段长度至少为5个字符。"],"mobile":["手机号格式无效。","手机号必须为数字。","手机号长度至少为11位。","手机号长度不能超过11位。"]}}

实现方案

核心逻辑统一为解析JSON错误数据 → 遍历字段与错误信息 → 构建列状UI,以下是不同技术场景的具体实现:

1. 原生JavaScript + HTML

直接操作DOM生成列布局:

<!-- 用于承载错误列的容器 -->
<div id="error-container"></div>

<script>
// 模拟API返回的错误数据
const errorResponse = {"message":{"name":["姓名字段长度至少为5个字符。"],"mobile":["手机号格式无效。","手机号必须为数字。","手机号长度至少为11位。","手机号长度不能超过11位。"]}};

const container = document.getElementById('error-container');
const errorFields = errorResponse.message;

// 遍历每个字段,生成对应列
for (const fieldName in errorFields) {
  // 创建列容器
  const column = document.createElement('div');
  column.style.display = 'inline-block';
  column.style.margin = '0 24px';
  column.style.verticalAlign = 'top';

  // 字段标题(可根据实际需求映射中文名称)
  const title = document.createElement('h4');
  title.textContent = fieldName === 'name' ? '姓名' : '手机号';
  column.appendChild(title);

  // 错误列表
  const errorList = document.createElement('ul');
  errorFields[fieldName].forEach(errorText => {
    const listItem = document.createElement('li');
    listItem.textContent = errorText;
    errorList.appendChild(listItem);
  });
  column.appendChild(errorList);

  container.appendChild(column);
}
</script>

2. Vue.js 实现

利用Vue的列表渲染快速生成列布局:

<template>
  <div class="error-columns">
    <div class="error-column" v-for="(errors, field) in errorData.message" :key="field">
      <h4>{{ fieldLabels[field] }}</h4>
      <ul>
        <li v-for="(error, idx) in errors" :key="idx">{{ error }}</li>
      </ul>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      errorData: {"message":{"name":["姓名字段长度至少为5个字符。"],"mobile":["手机号格式无效。","手机号必须为数字。","手机号长度至少为11位。","手机号长度不能超过11位。"]}},
      fieldLabels: {
        name: '姓名',
        mobile: '手机号'
        // 后续新增字段可在此扩展映射
      }
    };
  }
};
</script>

<style scoped>
.error-columns {
  display: flex;
  gap: 32px;
  flex-wrap: wrap;
}
.error-column {
  flex: 0 0 auto;
}
</style>

3. React 实现

通过JSX遍历生成列组件:

import React from 'react';

const ErrorColumnView = () => {
  const errorData = {"message":{"name":["姓名字段长度至少为5个字符。"],"mobile":["手机号格式无效。","手机号必须为数字。","手机号长度至少为11位。","手机号长度不能超过11位。"]}};
  const fieldLabels = {
    name: '姓名',
    mobile: '手机号'
  };

  return (
    <div style={{ display: 'flex', gap: '32px', flexWrap: 'wrap' }}>
      {Object.entries(errorData.message).map(([field, errors]) => (
        <div key={field} style={{ flex: '0 0 auto' }}>
          <h4>{fieldLabels[field]}</h4>
          <ul>
            {errors.map((error, idx) => (
              <li key={idx}>{error}</li>
            ))}
          </ul>
        </div>
      ))}
    </div>
  );
};

export default ErrorColumnView;

关键注意事项

  • 字段名称映射:提前维护字段名与展示标签的映射表,方便后续新增字段时快速适配
  • 响应式适配:可通过CSS媒体查询,在移动端将列布局切换为垂直堆叠,提升适配性
  • 异常容错:添加JSON解析失败、message字段为空的判断逻辑,避免UI崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:30:28