【问题标题】:javascript to format json string in .net view [duplicate]javascript在.net视图中格式化json字符串[重复]
【发布时间】:2020-07-08 03:30:29
【问题描述】:

so 我正在使用下面的 js 获取一个 json 字符串并将其格式化以在表格视图中显示它... 问题是由于某种原因......

var obj = JSON.parse(@item.requestExample)

在执行时抛出一个引用错误...

                @foreach (var item in Model.list)
                {
            <tr class="table-info">
                <td>@item.library</td>
                <td>@item.api</td>
                <td>@item.ibmiPgm</td>
                <td>@item.requestExample</td>
                <td>
                    <p id="GFG_UP" style="font-size: 15px; font-weight: bold;"></p>

                    <pre id="GFG_DOWN" style="color:green; font-size: 20px; font-weight: bold;"></pre>

                    <script>
                        var el_up = document.getElementById("GFG_UP");
                        var el_down = document.getElementById("GFG_DOWN");
                        var obj = JSON.parse(@item.requestExample);

                        el_up.innerHTML = JSON.stringify(obj);

                        function gfg_Run() {
                            el_down.innerHTML = JSON.stringify(obj, undefined, 4);
                        }
                    </script>

                </td>


                <td>
                    <button typeof="button" onclick="gfg_Run();">Format JSON</button>
                    <button typeof="button" onclick="location.href='@Url.Action(item.api, "", new { api = item.api, jsonRequest = item.requestExample } )'">Consume API</button>
                </td>

原始字符串为:{"env":"xxx","command":"getCustomerBankAccountInfo","payload":[{"custNo":"101"},{"custNo":"102"}] }

当在运行时单击“格式 json”时,检查/控制台显示我的字符串中有一个意外的令牌 &...

       var obj = JSON.parse({&quot;env&quot;:&quot;xxx&quot;,&quot;command&quot;:&quot;getTableLayout&quot;,&quot;payload&quot;:[{&quot;schema&quot;:&quot;COREIRST&quot;,&quot;table&quot;:&quot;RST00001T&quot;},{&quot;schema&quot;:&quot;COREIRST&quot;,&quot;table&quot;:&quot;RST00002T&quot;}]});

希望有人能告诉我我在这里缺少什么......

tia

【问题讨论】:

    标签: javascript .net json.net


    【解决方案1】:

    JSON.parse() 不会为您替换 html 字符。您需要将所有 &amp;quot;s 替换为实际的 " 字符。

    【讨论】:

    • 它不起作用...任何时候我什至在我的 js 中引用 @item.requestExample(json 字符串),它都会因 " 的意外标记而出错
    • 几件事 - 在你的最后一个代码 sn-p 中,JSON.parse 接受一个字符串参数,你需要用单引号或双引号括起来。此外,如果您需要使用 javascript 处理 &amp;quot;s,替换它们很简单,但我建议您在后端代码中寻找解决方案,因为您不需要处理 js 中所有可能的 html 字符.也就是说,这里是你将如何替换为 js:dataString.replace(/&amp;quot;/g, '"');
    • 这完全是错误的方法,你知道,最好的方法是...```
      @Newtonsoft.Json.Linq.JToken.Parse(item.requestExample ).ToString()
      ```
    【解决方案2】:

    .Net 正在尝试为您清理您的输入。只需使用 .Net 中的 HTML 解码器封装您的调用即可。

    var obj = JSON.parse('@(HttpUtility.HtmlDecode(@item.requestExample))');
    

    注意:我用一组额外的括号括起来,因为当你混合 JS/C# 时 Razor 会变得很奇怪

    这将完成@redouglas 提到的所有正确替换,而无需编写大量代码。

    【讨论】:

    • 双方都表示赞赏。谢谢。我也有一个想法(基于您的答案)以某种方式直接从模型而不是 html @item.requestExample 访问该 json 请求示例...不确定这是否可行,但可能是另一种选择。谢谢你们!
    • 当我将var obj = JSON.parse('@(HttpUtility.HtmlDecode(@item.requestExample))'); 放在我的.net 视图中的JS 脚本中时,它说“名称HttpUtility 在当前上下文中不存在”...有什么建议吗?
    • Paven 忽略了这一点,一旦我用 System.Web 对其进行了限定,它就接受了它......但似乎仍然不起作用......在运行时在检查/控制台中......localhost/:1 Uncaught SyntaxError: Unexpected token &amp; in JSON at position 1 at JSON.parse (&lt;anonymous&gt;) at (index):93 和看看显示...``` var obj = JSON.parse('{"env":"xxx","command":"getTableLayout","payload"...```
    • 所以它不起作用......任何时候我什至在我的 js 中引用 @item.requestExample(json 字符串)时,它都会因 " 的意外标记而出错
    • 这完全是错误的方法,你知道,最好的方法是......```
      @Newtonsoft.Json.Linq.JToken.Parse(item.requestExample ).ToString()
      ``
    【解决方案3】:

    这完全是错误的方法,你知道,最好的方法是...... &lt;td&gt; &lt;pre&gt;@Newtonsoft.Json.Linq.JToken.Parse(item.requestExample).ToString()&lt;/pre&gt; &lt;/td&gt;

    【讨论】:

      猜你喜欢
      • 2020-07-04
      • 2013-12-10
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 2020-10-29
      • 2016-09-05
      • 2015-01-07
      • 1970-01-01
      相关资源
      最近更新 更多