【问题标题】:Parse JSON from text field to Array of objects将 JSON 从文本字段解析为对象数组
【发布时间】:2015-06-17 16:40:38
【问题描述】:

我在将一些 JSON 数据解析为原始对象数组时遇到了问题,这是出现的问题 例如,我有这个原始数据(JavaScript):

var points = [];
points = [
    { lat: "38.713852", lng: "-9.145621", data: "<div align=left class=gMapsOverlay><span>Loja centro de Braga</span></div>", options: { icon: '../layout/icon_map_point.png' } },
    { lat: "39.825751", lng: "-7.479642", data: "<div align=left class=gMapsOverlay><span>Apartamento T3</span></div>", options: { icon: '../layout/icon_map_point.png' } },
    { lat: "38.730638", lng: "-9.139604", data: "<div align=left class=gMapsOverlay><span>Apartamento Duplex</span></div>", options: { icon: '../layout/icon_map_point.png' } }
];

我必须完全按照我试图解释的方式执行此操作,我需要将其发送到 ID="hdd_GmapPoints" 的隐藏字段(在这种情况下),我这样做:

private void SetMap () {
    string aux = "";
    string[] lat = new string[3];
    string[] lng = new string[3];
    string[] designacao = new string[3];

    lat[0] = "38.713852";
    lat[1] = "39.825751";
    lat[2] = "38.730638";

    lng[0] = "-9.145621";
    lng[1] = "-7.479642";
    lng[2] = "-9.139604";

    designacao[0] = "Loja centro de Braga";
    designacao[1] = "Apartamento T3";
    designacao[2] = "Apartamento Duplex";

    for(int i = 0; i < lat.Length; i++) {
        aux += "{ lat: \"" + lat[i].ToString().Replace(",", ".") + "\",  " +
               "lng: \"" + lng[i].ToString().Replace(",", ".") + "\", " +
               "data: \"<div align=left class=gmapsoverlay><span>" + designacao[i] + "</span></div>\", " +
               "options: { icon: '../layout/icon_map_point.png' } },";

        //aux[idx] = "{ lat: \"" + r["latitude"].ToString().Replace(",", ".") + "\",  " +
        //           "lng: \"" + r["longitude"].ToString().Replace(",", ".") + "\", " +
        //           "data: '<div align=left class=gMapsOverlay><span>" + r["designacao"] + "</span></div>', " +
        //           "options: { icon: '../layout/icon_map_point.png' } }";
    }

    if(aux != "") {
        //hdd_GmapPoints.Value = aux.ToString();
        //hdd_GmapPoints.Value = aux.Substring(0, aux.Length - 1);

        var jsonSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
        string json = jsonSerializer.Serialize(aux.ToString().Substring(0, aux.ToString().Length - 1));
        hdd_GmapPoints.Value = json;

    }
}

然后我必须将其解析回 Javascript 对象数组,这是我的 javascript 代码:

function setMap() {

    var points = [];

    points = [
            { lat: "38.713852", lng: "-9.145621", data: "<div align=left class=gMapsOverlay><span>Loja centro de Braga</span></div>", options: { icon: '../layout/icon_map_point.png' } },
            { lat: "39.825751", lng: "-7.479642", data: "<div align=left class=gMapsOverlay><span>Apartamento T3</span></div>", options: { icon: '../layout/icon_map_point.png' } },
            { lat: "38.730638", lng: "-9.139604", data: "<div align=left class=gMapsOverlay><span>Apartamento Duplex</span></div>", options: { icon: '../layout/icon_map_point.png' } }
        ];

        //points = [str1.split('%')];


        var aux = $("#<%=hdd_GmapPoints.ClientID %>").val();
        var points2 = eval(aux);
        //var points2 = JSON.parse(aux);

        console.log("TYPE 1: " + $.type(points));
        console.log("CONTENT 1:" + points);
        console.log("TYPE 2: " + $.type(points2));
        console.log("CONTENT 2:" + points2);
        console.table(points);
}

但它不起作用,因为它向我显示了 supose 对象作为字符串,这是我从 console.log(points2) 得到的;

"{ lat: "38.713852", lng: "-9.145621", data: "Loja centro de Braga", 选项: { icon: '../layout/icon_map_point.png' } },{ lat: "39.825751 ", lng: "-7.479642", 数据: "Apartamento T3", 选项: { icon: '../layout/icon_map_point.png' } },{ lat: "38.730638", lng: "-9.139604", 数据: “Apartamento Duplex”,选项:{ icon: '../layout/icon_map_point.png' } }"

我需要这个来提供什么

console.table(points);

给予

再次,我需要通过隐藏字段将其从 c# 发送到 JQuery,代码必须通过该隐藏字段。

有人知道吗?

【问题讨论】:

  • 你能说明$("#&lt;%=hdd_GmapPoints.ClientID %&gt;").val()是什么吗?
  • 我不确定你到底在做什么,但如果 console.log(points) 给你一个 javascript 对象作为字符串,请执行 console.log(JSON.parse(points))
  • 它是从底部算起的第二个代码块:"{ lat: "38.713852", lng: "-9.145621", .... etc.... t/icon_map_point.png' } }"
  • 我没有使用积分,正如我所说的是原始和想要的产品,以及 3 个对象的数组,但我只得到了我在底部告诉的字符串

标签: javascript c# jquery asp.net json


【解决方案1】:

抱歉,大家耽搁了大家的时间,但我找到了解决方案,因为我不太擅长 c#,我没想到这会奏效,但确实奏效了。

我所做的实际上是在代码后面创建对象,这样我就可以使用 JSON 将整个对象从 c# 完全传递到 javascript。

//declared this 2 classes at the top
class Options {
    public string icon {
        get;
        set;
    }
}

class Aux {
    public string lat {
        get;
        set;
    }
    public string lng {
        get;
        set;
    }
    public string data {
        get;
        set;
    }
    public Options options {
        get;
        set;
    }
}

private void SetMap () {
    Options opt = new Options();
    List<Aux> aux = new List<Aux>();

    //this is to make the code to work with dinamic content
    string[] latitude = new string[3];
    string[] longitude = new string[3];
    string[] designacao = new string[3];

    latitude[0] = "38.713852";
    latitude[1] = "39.825751";
    latitude[2] = "38.730638";

    longitude[0] = "-9.145621";
    longitude[1] = "-7.479642";
    longitude[2] = "-9.139604";

    designacao[0] = "Loja centro de Braga";
    designacao[1] = "Apartamento T3";
    designacao[2] = "sxpto";

    for (int i=0; i< 3; i++){
        opt.icon = "../layout/icon_map_point.png";

        //this is what it's really needed
        aux.Add(new Aux {lat = latitude[i], lng = longitude[i], data = "div align=left class=gmapsoverlay><span>"+designacao[i]+"</span></div>", options = opt});
    }
    // end of dinamic content

    if(aux != null) {
        //parse the whole object to JSON
        var jsonSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
        string json = jsonSerializer.Serialize(aux);
        hdd_GmapPoints.Value = json;

    }

}

在javascript方面,只需解码隐藏字段

var aux = $("#<%=hdd_GmapPoints.ClientID %>").val();
var points2 = JSON.parse(aux);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多