如何检查来自两个 json 数据的比较数据?

Posted

技术标签:

【中文标题】如何检查来自两个 json 数据的比较数据?【英文标题】:How to check compare data from two json data? 【发布时间】:2018-07-27 02:13:43 【问题描述】:

我用于显示特定帖子详细信息的 json 数据是

http://127.0.0.1:8000/listings/

"data": "pid": 109, "name": "Labs", "website": "service.com",  "status": true

我的完整个人资料详细信息的 json 数据是

http://127.0.0.1:8000/profile/

"status": true, "data": "basic": "name": "Kuis", "is_new": false, "is_email_verified": false, "is_phone_verified": false, "listings": ["pid": 109, "nams": "Labs","created_at": "2018-02-14", "validity": "2019-06-29", "views": 2, "gstno": "09485481072", "is_featured": false ,"pid": 112, "nams": "Labs12","created_at": "2018-02-15", "validity": "2019-06-29", "views": 2, "gstno": "09499481072", "is_featured": false ], "total_listings": 2

所以,现在我给出一个编辑选项。那么,我需要检查 pid 是否存在于配置文件数据中?我怎样才能做到这一点?

我的vue js代码是

mounted() 
    var self = this;
    data = ;
    data['auth-token'] = this.authType;
    $.ajax(
        url: "http://127.0.0.1:8000/profile/",
        data: data,
        type: "POST",
        dataType: 'json',
        success: function (e) 
            if (e.status == 1) 
                self.listings = e.data.listings;
            
        ,
    );
    data = ;
    data['auth-token'] = this.authType;
    data['pid'] = this.pid;
    $.ajax(
        url: "http://127.0.0.1:8000/listings/",
        data: data,
        type: "POST",
        dataType: 'json',
        success: function (e) 
            if (e.status == 1) 
                self.data = e.data;
            
        ,
    );
,

我在data[] 中有列表数据,listings[] 中有来自个人资料的所有列表数据。

我需要比较data[] 中的pid 是否存在于listings[]

我需要在html侧实现以下

<div if="data.pid == listings.pid"> Success </div> <div v-else> Failure</div>

我是初学者,只知道基础知识。请帮我解决。

【问题讨论】:

您是否需要检查数据中的 pid[] 是否存在于包含不同 pid 的列表 [] 中 是的先生..我需要..如何使用循环检查? 所以你基本上是说你从API 获得一个特定的配置文件并将其存储在data 和来自另一个API 的所有列出的配置文件listings 并想检查是否data 中的特定配置文件可以在 listings 中找到,对吗? 先生,在 data[] 中,我正在存储一个特定的列表。在列表 [] 中,我存储所有列表。我需要 pid 中的数据 [] 存在于列表 [] 中。 提供一个具体的例子,数据和列表的样子,以便人们可以帮助你 【参考方案1】:

一个简单的解决方案是创建一个函数来确定 id 是否已经存在。

new Vue(
  el: '#app',
  data: 
    data: ,
    listing: []
  ,
  computed: 
  	validatePID: function() 
    	var ret = false;
       for(var idx in this.listing) 
          if (this.listing[idx].pid == this.data.pid) 
              ret = true;
              break;
          
       

       return ret;
    
   ,
  mounted: function() 
  	this.data = "pid": 109, "name": "Labs", "website": "service.com",  "status": true;
    this.listing.push("pid": 109, "nams": "Labs","created_at": "2018-02-14", "validity": "2019-06-29", "views": 2, "gstno": "09485481072", "is_featured": false );
    this.listing.push("pid": 112, "nams": "Labs12","created_at": "2018-02-15", "validity": "2019-06-29", "views": 2, "gstno": "09499481072", "is_featured": false );
  
)
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.13/dist/vue.js"></script>
<div id="app">
 <span v-if="validatePID">test</span>
 <span v-else>test2</span>
</div>

这是你的运行代码sn-p。

【讨论】:

html部分如何签入? 如果您可以访问 validatePID 函数中的数据和列表,它应该类似于 v-if="validatePID",并注意挂载生命周期期间的值更改,所以基本上我会改为计算函数。 【参考方案2】:

使用箭头函数的另一种可能的解决方案是

const matchingListItem = listings.find(listItem => listItem.pid === data.pid);

或者,如果您不需要匹配的列表项,只想知道 data.pid 是否包含在列表数组中,您可以使用此函数

isDataInListings = (data, listings) => listings.some(item => item.pid === data.pid);

【讨论】:

【参考方案3】:

由于列表是一个数组而不是一个对象,因此您需要使用索引对其进行循环:

function checkOccurence(data, listing) 
  let dataFound = false;
  for(let i = 0; i < listing.length; i++) 
    if (listing[i].pid === data.pid) 
      dataFound = true;
      break;
    
  

  return dataFound;
;

然后您可以在渲染中使用返回的boolean 来确定@​​987654323@ 或failure,如下所示:

&lt;div if="checkOccurence(data, listing)"&gt; Success &lt;/div&gt; &lt;div v-else&gt;Failure&lt;/div&gt;

【讨论】:

如何在html端签入? 乐于助人! :)【参考方案4】:

在你的方法中定义存在方法,

  methods: 
        exists: function() 
        var exist = false;
             var listings = self.listings;
             var data = self.data;
             for(var listing of listings) 
              if (listing.pid == data.pid) 
                  exist = true;
                  break;
              
           
           return exist;
        
    

你应该像这样调用方法,

   <div if="exists()"> Success </div> <div v-else> Failure</div>

【讨论】:

listings 是一个数组,因此您应该编辑它以使用index-looping 而不是object-looping。 :) 我认为这是一个 json 对象?你不觉得吗? 不代表不能包含数组

以上是关于如何检查来自两个 json 数据的比较数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何比较两个json的数据并根据结果在vue中显示图标?

比较两个 JSON 并显示我们更改了哪一列的活动?

如何比较来自同一API请求的JSON数据?

如何比较来自不同数据库的两个表

检查 json 数据以在 extjs 中进行比较

JavaScript:比较两个JSON对象的结构,而忽略它们的值