我无法从 JSON 获取数据并且没有错误

Posted

技术标签:

【中文标题】我无法从 JSON 获取数据并且没有错误【英文标题】:I can't get data from JSON and there is no error 【发布时间】:2021-10-01 16:48:37 【问题描述】:

我正在尝试从 json 文件中仅获取一个对象,但不能。在检查器中,对象是空的,当我试图做某事时,该对象因为它是空的而得到空异常。我还尝试将我试图检索的对象放入列表中,但列表仍然是空的。我的错误在哪里? 我的 Json 文件如下所示:


   "Dialogue": 
     "npcName": "John",
     "sentences": [
       
         "text1": "Hello, come here",
         "text2": "How do you feel",
         "text3": " good bye!"
       
     ]
 
   
 
 

这是我的代码:

 public TextAsset jsonScript;
 
     public Dialogue dialogue;
 
   void Start()
     
  
         try
         
 
             dialogue = JsonUtility.FromJson<Dialogue>(jsonScript.text);
             
         
         catch (System.Exception error)
         
 
             Debug.LogError(error);
         
         
     

对话类:

 [System.Serializable]
 public class Dialogue 
 
     public string npcName;
     public string[] sentences;
 

【问题讨论】:

【参考方案1】:

原始 json 中的句子是一组复杂对象,其属性为 text1, text2, text3

你的 json 应该是这样的



     "npcName": "John",
     "sentences": [
       "Hello, come here", "How do you feel", " good bye!"
     ]
 
 

适合Dialogue 类型。

【讨论】:

非常感谢它的工作!但是我不明白为什么当我删除对象的名称(对话)时它会起作用? @cançağlarkırıcı - 我认为答案是嵌套。在原始示例中,您有一个 JSON 对象,其中包含一个 Dialogue 对象,该对象包含一个字符串和一个数组。在 arynaq 的回答中,顶层对象已被移除,因此您所拥有的只是一个带有字符串和数组的对象,这符合 Dialogue 模型。 @suspicious_williams 哦,我现在明白了。谢谢你:)【参考方案2】:

如果更改 JSON(如在 this answer 中)不是一种选择,那么您只需要一个类似的包装类

[Serializable] 
public class Root 

    public Dialogue Dialogue; 

匹配您的原始 JSON 结构并执行

dialogue = JsonUtility.FromJson<Root>(jsonScript.text).Dialogue; 

改为。

【讨论】:

非常感谢。这也是一个非常合乎逻辑的解决方案。

以上是关于我无法从 JSON 获取数据并且没有错误的主要内容,如果未能解决你的问题,请参考以下文章

Dart:如何获取没有数字id(字符串)的数据?

Vuejs从本地json获取数据

无法从 JSON 获取某些数据,返回未定义的 Angular 6

我正在从 json Web 服务获取数据,但无法在我的 ui 上显示它

无法从 Heroku 应用获取数据。 CORS 错误

用于从 api 获取 json 数据的 url 格式