小编Chr*_*nes的帖子

将MySQL中的JSON数组转换为行

更新:现在可以通过JSON_TABLE函数在MySQL 8中实现:https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html

我喜欢MySQL 5.7中的新JSON函数,但是试图将JSON中的值合并到一个普通的表结构中.

从中获取JSON,操作和提取数组等很简单.一路JSON_EXTRACT.但是从JSON数组到行的逆转呢?也许我对现有的MySQL JSON功能非常密切,但我还是无法解决这个问题.

例如,假设我有一个JSON数组,并希望为数组中的每个元素插入一行及其值?我找到的唯一方法是编写一堆JSON_EXTRACT(...'$ [0]')JSON_EXTRACT(...'$ [1]')等并将它们组合在一起.

或者,说我有一个JSON数组,并希望GROUP_CONCAT()它到一个逗号分隔的字符串?

换句话说,我知道我可以这样做:

SET @j = '[1, 2, 3]';
SELECT GROUP_CONCAT(JSON_EXTRACT(@j, CONCAT('$[', x.n, ']'))) AS val
  FROM   
  (    
    SELECT 0 AS n    
    UNION    
    SELECT 1 AS n    
    UNION    
    SELECT 2 AS n    
    UNION    
    SELECT 3 AS n    
    UNION    
    SELECT 4 AS n    
    UNION    
    SELECT 5 AS n    
  ) x
WHERE x.n < JSON_LENGTH(@j);
Run Code Online (Sandbox Code Playgroud)

但这伤害了我的眼睛.而我的心.

我该怎么做:

SET @j = '[1, 2, 3]';
SELECT GROUP_CONCAT(JSON_EXTRACT(@j, '$[ * ]'))
Run Code Online (Sandbox Code Playgroud)

...并将它与数组中的值和JSON数组本身连接在一起?

我想我在这里寻找的是某种JSON_SPLIT:

SET …
Run Code Online (Sandbox Code Playgroud)

mysql json database-normalization

21
推荐指数
3
解决办法
3万
查看次数

确定从onsubmit中提交表单的元素

有没有办法确定哪个元素在onsubmit处理程序中提交了一个表单?试图编写一个知道点击了哪个元素的通用处理程序.例如,给定以下形式:

<form onsubmit="onSubmitHandler">
    <input type="submit" name="submit1" />
    <input type="submit" name="submit2" />
</form>
Run Code Online (Sandbox Code Playgroud)

如何在onSubmitHandler中确定单击了哪个提交按钮?我尝试了event.target/event.srcElement,但它提供了表单,而不是实际的提交按钮.

更新:我在这里写一个通用控件,所以它不知道表单上有什么.解决方案需要在不知道和更改表单的html的情况下工作.我的后备是走DOM,找到可能导致提交的所有按钮,但我想避免这种情况.

html javascript dhtml

9
推荐指数
1
解决办法
6745
查看次数

Kindle Fire和文件上传

我已经尝试了一切我能想到的让Kindle Fire浏览器接受上传,没有骰子.文件选择器显示,但上传错误.在蓝色的月亮中它每次都有效,我无法弄明白为什么.我已经尝试过HTML5和普通的FORM POST上传.

有人有想法,还是运气好?

此外,文件选择器假装为HTML5,但然后返回0作为文件大小,拧紧任何文件大小显示.

测试用例:http://jsfiddle.net/dbaxD/1/

html5 kindle-fire

8
推荐指数
1
解决办法
795
查看次数

禁用 Razor 仪器

有没有办法在 Razor 中禁用页面检测?我遇到了一个问题,我试图在 _AppStart 中设置一个 razor 模板委托,然后在其他页面上使用它。它会正常工作,除了检测在 BeginContext/EndContext 中保留对 _AppStart 的引用,这会在其他页面上爆炸。

例如:

// TemplateHolder.cs
public static class TemplateHolder
{
    public static Func<object, object> TheTemplate = null;
}

@* _AppStart.cshtml *@
@{
    TemplateHolder.TheTemplate = @<b>the template</b>;
}

@* OtherPage.cshtml *@
@TemplateHolder.TheTemplate(Model);
Run Code Online (Sandbox Code Playgroud)

在您尝试在 OtherPage.cshtml 中呈现模板之前,一切似乎都可以正常工作,在此之前,您将从内部检测尝试获取 _AppStart 的 HttpContext 时收到错误。

用一点点反射来解决这个问题很容易:

static readonly PropertyInfo _instrumentationService = typeof(WebPageExecutingBase).GetProperty("InstrumentationService", BindingFlags.NonPublic | BindingFlags.Instance);
static readonly PropertyInfo _isAvailableProperty = typeof(InstrumentationService).GetProperty("IsAvailable");

public static void DisableInstrumentation(this WebPageExecutingBase page)
{
    _isAvailableProperty.SetValue(_instrumentationService.GetValue(page), false);
}
Run Code Online (Sandbox Code Playgroud)

... 这可以防止 BeginContext/EndContext 调用被呈现。

但是,Razor 的全部意义不是面向对象和可配置的吗?我觉得我错过了一些东西。

asp.net-mvc razor

5
推荐指数
0
解决办法
181
查看次数