【问题标题】:checking JSON Data contains media or not..?检查 JSON 数据是否包含媒体..?
【发布时间】:2016-10-21 07:14:11
【问题描述】:

我正在使用 JSON 数据呈现摘要,因为我正在检查媒体。 如果 JSON 数据中存在 media(image,audio,video),它应该将相应的媒体渲染到屏幕上。所以我正在检查每个包含媒体或不基于文件类型的值。我在检查不同的数据值时遇到了问题

这是我的 JS 代码

        var disp=[
                  {
                    "Session_ID": 1,
                    "column1": "http://dev.starport.in/phpupload/dentist.jpeg",
                    "Session_Name": "0",
                    "Session_Code": "0",
                    "Start_Time": "09:30",
                    "End_Time": "09:30",
                    "Staff": 0,
                    "Date": "/Date(-2188013400000)/",
                    "Status": 1,
                    "RowNumber": 1
                  }
                ];
        var mediatype;
        var media;
        var fname;
        $.each(disp[0],function(key,value)
        {
            fname=value;
            media=0;
            var filetype;

            if(fname.indexOf(".")> -1)            // problem
                filetype = fname.split('.').pop();
            else
                return true;

            if($.inArray(filetype, ['gif','png','jpg','jpeg']) >= 1) {
                media=1;
                mediatype="image";
                return false;
            }
            else if($.inArray(filetype, ['mkv','mp4','vob']) >= 1) {
                media=1;
                mediatype="video";
                return false;
            }
            else if(filetype == "mp3") {
                media=1;
                mediatype="audio";
                return false;
            }
            else
            {
                media=0;
            }
        });
        console.log(mediatype);

因此我的代码适用于字符串并呈现适当的项目,当涉及到其他格式时出现错误..

等待回复提前致谢

【问题讨论】:

  • 你为什么不试试这个:jsfiddle.net/jk5nsz4z。无需遍历每个对象属性,只需遍历对象并使用 .colum1 属性即可获得所需的结果。
  • 我想检查所有字段而不是 column1,因为我不知道哪个字段有媒体
  • @keerthivasana:现在检查这个小提琴:jsfiddle.net/maverickosama92/jk5nsz4z/1
  • @maverickosama92 谢谢你

标签: javascript jquery arrays json validation


【解决方案1】:

此代码将遍历 disp 数组中的所有项目,并且对于每个项目,它将迭代他的 key - value

您的问题是第一个值是int,因此您不能使用indexOf。您应该首先检查该值是否为string

var disp = [{
  "Session_ID": 1,
  "column1": "http://dev.starport.in/phpupload/dentist.jpeg",
  "Session_Name": "0",
  "Session_Code": "0",
  "Start_Time": "09:30",
  "End_Time": "09:30",
  "Staff": 0,
  "Date": "/Date(-2188013400000)/",
  "Status": 1,
  "RowNumber": 1
}];
var mediatype;
var media;
var fname;

disp.forEach(function(item) {
  var media = 0;
  var filetype;

  for (var key in item) {
    if (typeof item[key] === "string") {
      if (item[key].indexOf(".") > -1) {
        filetype = item.column1.split(".").pop();
        break;
      }
    }
  }
  var media = 0;
  var filetype;

  if (item.column1.indexOf(".") > -1) {
    filetype = item.column1.split(".").pop();
  }

  if ($.inArray(filetype, ['gif', 'png', 'jpg', 'jpeg']) >= 1) {
    media = 1;
    mediatype = "image";
    return false;
  } else if ($.inArray(filetype, ['mkv', 'mp4', 'vob']) >= 1) {
    media = 1;
    mediatype = "video";
    return false;
  } else if (filetype == "mp3") {
    media = 1;
    mediatype = "audio";
    return false;
  } else {
    media = 0;
  }
});

console.log(mediatype);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

注意

这是一个非常糟糕的做法。您应该知道您的媒体存储在哪里。例如,将您的媒体存储在End_Time 中会很奇怪。

最好的解决方案是更改您的 API 和发送的 JSON

【讨论】:

  • 我想检查所有字段而不是 column1,因为我不知道哪个字段有媒体
  • 那么媒体可以在Start_time里面吗?如果是这种情况,您应该更改您的 API。这是一种糟糕的工作方式
  • 是的,它可以是任何字段。我会考虑更改 API。如果有其他可能的话..?
【解决方案2】:

您的解决方案存在问题 - 处理后端和 api 结构。

请按照以下步骤操作。

  1. 在后端正确保存媒体。让我们考虑一下你的桌子是 还有两个字段。 media_type 和 media_path。
  2. 具有正确的 JSON 响应,其中包含作为“media_type”的键和 “媒体路径”。
  3. 您应该能够非常快速地解析此 JSON 响应。

【讨论】:

  • 非常感谢您的建议。但现在我想检查所有字段而不是 column1,因为我不知道哪个字段有媒体可以将我的摘要脚本作为模板。适用于所有场景
【解决方案3】:

问题:indexOf 是一个字符串函数。您的代码会遍历所有 JSON 属性。它们还包含数字。这导致了问题。也许直接导航到正确的属性会更好。

console.log(disp[0].column1)
"http://dev.starport.in/phpupload/dentist.jpeg"

我的意见是你应该重新考虑你的问题。 =)

最好的问候鲁本

【讨论】:

    猜你喜欢
    • 2020-01-17
    • 2015-01-24
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 2023-03-23
    相关资源
    最近更新 更多