【问题标题】:SimpleJSON returns null when handling a call from PostmenSimpleJSON 在处理来自 Postmen 的呼叫时返回 null
【发布时间】:2019-08-08 14:22:33
【问题描述】:

我已将 SimpleJSON 安装到我的 unity SimpleJSON 中,试图反序列化从 REST-HTTP 调用收到的包含 JSON 的调用

simpleJSON

that's my script

我正在监听 localhost 3000 并从邮递员发送

GET  HTTP/1.1
Host: localhost:3000
Accept: application/json
Content-Type: application/json
cache-control: no-cache
Postman-Token: 3a64322b-a33c-4828-8347-11cdc7da70af
{
    "item": "seeds",
    "Answers": "5",
    "richText": "*some text*"
}------WebKitFormBoundary7MA4YWxkTrZu0gW--

当 Simplejson 收到数据时,我验证了raw data has arrived successfully

但是,当使用令牌“3000accept-encoding”时,进程会转储错误(3000 是端口号) 在第 529 行。

ctx.Add(TokenName, ParseElement(Token.ToString(), TokenIsQuoted));

因为它是一个静态函数,所以我复制了它并创建了一个对象返回版本,它返回了我能想到的用于调试的所有数据: i, aJSON[i], Token, Token.Length, TokenName,TokenIsQuoted 并将该行更改为

string final = "";

...

case ',':

   if (QuoteMode)
   {
      Token.Append(aJSON[i]);
      break;
   }
   final =  "aJSON[i] "+aJSON[i] +", token "+ Token + ", length "+ Token.Length +", token Name '" + TokenName+"', IsQuoted " + TokenIsQuoted+"-";
   if (Token.Length > 0 || TokenIsQuoted)
   {   
      try
      {
         ctx.Add(TokenName, ParseElement(Token.ToString(), TokenIsQuoted));
      }
      catch(Exception e)
      {
         final+="      "+e;
         return final;
      }
   }

返回的是:

aJSON[i] ,, token gzip, length 4, token Name '3000accept-encoding', IsQuoted False-      System.NullReferenceException: Object reference not set to an instance of an object
  at SimpleJSON.JSONNode.ParseTester (System.String aJSON) [0x00316] in C:\++Projects\SparkBeyond\Unity\Unity Projects\JSONDeserialize\Assets\SimpleJSON-master\SimpleJSON.cs:690 

这表明即使它是一个开关(第 605 行)并且情况是 aJSON[i] 是 ',' 似乎出于某种原因,aJSON[i] 恰好为空。

你们中有人知道为什么会发生这种情况吗? 而且,那部分甚至没有','数字......

我没有更改脚本。 我没有添加 SimpleJSONUnity.cs

【问题讨论】:

  • 我没有什么野心来解析你所有的代码,并且可能会发现一个错误......我已经可以说:SimpleJSON 不是要逐个字符地解析输入字符串。它宁愿期望一个有效的 JSON 字符串作为输入,并且可以返回诸如 var N = JSON.Parse(the_JSON_string); var versionString = N["item"].Value; 之类的某些项目,您应该专注于将收到的字符串转换为有效的 JSON 字符串,而不是应该没有问题。
  • 嗨,你是对的。事实上,当我得到 HTTP 答案并将其发送到反序列化而不先抓取正文时,问题就出在脚本之前。在调试了整个答案后,我发布了它。简单的 json 有一个 ctx 变量,一旦达到 { 数字(json 中的第一个,而不是 HTTP 调用中的第一个)就会初始化。这就是为什么我被抛出一个空错误谢谢

标签: json unity3d postman simplejson http-accept-encoding


【解决方案1】:

当我得到 HTTP 答案并将其发送到反序列化而不先抓取正文时,问题出在脚本之前。

在调试了整个答案后,我发布了它。简单的 json 有一个 ctx 变量,一旦达到 { 数字(json 中的第一个,而不是 HTTP 调用中的第一个)就会初始化。

这就是为什么我被抛出一个空错误

【讨论】:

    猜你喜欢
    • 2010-09-08
    • 2022-07-30
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 2019-10-27
    相关资源
    最近更新 更多