首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查JSON数据是否包含媒体..?

检查JSON数据是否包含媒体..?
EN

Stack Overflow用户
提问于 2016-10-21 07:14:11
回答 3查看 161关注 0票数 0

我用JSON数据呈现摘要,因为我正在检查媒体。如果媒体(图像、音频、视频)存在于JSON数据中,它应该将相应的媒体呈现给屏幕。因此,我正在根据文件类型检查每个包含或不包含媒体的值。我在检查不同的数据值时遇到了这个问题

这里是我的JS代码

代码语言:javascript
复制
        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);

因此,我的代码适用于字符串,并在其他格式出现错误时呈现适当的项。

等待答复,谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-21 07:22:17

这段代码将遍历disp数组中的所有项,并对每个项迭代他的key - value

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

代码语言:javascript
复制
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);
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

注意事项

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

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

票数 1
EN

Stack Overflow用户

发布于 2016-10-21 07:19:43

解决方案的问题--在后端和api结构上工作。

请按照以下步骤操作。

  1. 在后端正确保存媒体。假设您的表还有两个字段。media_type和media_path.
  2. 有正确的JSON响应,其中包含键为"media_type“和"media_path”。
  3. 您应该能够非常快地解析这个JSON响应。
票数 1
EN

Stack Overflow用户

发布于 2016-10-21 07:38:14

问题: indexOf是一个字符串函数。代码遍历所有JSON属性。它们也包含数字。这是造成问题的原因。也许更好的方法是直接导航到适当的攻击。

代码语言:javascript
复制
console.log(disp[0].column1)
"http://dev.starport.in/phpupload/dentist.jpeg"

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

向鲁本问好

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40170517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档